Appearance
关注点
如何创建对象,将对象的创建与使用分离。
单例模式(Singleton)
- 可以将构造函数私有化,并添加一个静态的成员变量,用于保存单例对象。这样,在第一次调用
getInstance()时,会创建一个对象,并保存在静态变量中。之后,每次调用getInstance()时,都会返回保存的静态变量中的对象。这样,就实现了单例模式。 - 现在大多数将bean交给spring管理,所以需要自己写单例的场景变少了。
- 利用枚举,实现单例,jvm底层枚举类本身是单例的。
工厂模式(Factory)
- 简单工厂:创建一个工厂类,根据传入的参数,返回一个对象。但凡能够创建对象,都可以认为这个类就是一个工厂类。
- 抽象工厂:就是有一个抽象工厂类,这个抽象工厂类里面定义了一个创建对象的方法,这个方法返回一个抽象产品类。然后通过抽象工厂类的子工厂类来创建对象。
建造者模式 (构建器模式)(Builder)
- 目的:将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。
- 之前项目里的订单创建使用的
build方法,其实已经靠近此模式了,如果抽离出来,就是一个完整的Builder模式,同时也可以结合工厂模式实现更灵活的创建对象逻辑。
原型模式 (Prototype)
- 目的:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
- 典型应用:Object 类中的 clone() 方法,用于创建成本较高或配置繁琐的对象副本。
- 实际应用里,我们并不会直接使用 clone() 方法,因为它是浅拷贝,对于引用类型的属性,只拷贝引用,而不是拷贝对象。如果要创建深度拷贝,需要利用递归等办法自行实现。但现在已经有许多工具类已经实现了深拷贝的方法,比如 Apache 的 BeanUtils 类。