三、建造者模式(Builder)
建造者模式可以将一个类的构建和表示进行分离
适用场景:
- 隔离复杂对象的创建和使用,相同的方法,不同执行顺序,产生不同事件结果
- 多个部件都可以装配到一个对象中,但产生的运行结果不相同
- 产品类非常复杂或者产品类因为调用顺序不同而产生不同作用
- 初始化一个对象时,参数过多,或者很多参数具有默认值
- Builder模式不适合创建差异性很大的产品类
产品内部变化复杂,会导致需要定义很多具体建造者类实现变化,增加项目中类的数量,增加系统的理解难度和运行成本 - 需要生成的产品对象有复杂的内部结构,这些产品对象具备共性;
开发中应用场景:
- StringBuilder类的append方法
- SQL中的PreparedStatement
- JDOM中,DomBuilder、SAXBuilder
参考文章:
一篇文章就彻底弄懂建造者模式(Builder Pattern) - 简书 (jianshu.com)
四、原型模式(prototype)
使用原型实例指定要创建对象的类型,通过复制这个原型来创建新对象。
适用场景
- 通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式
- 就是java中的克隆技术,以某个对象为原型,复制出新的对象。显然,新的对象具备原型对象的特点。优势有:效率高(直接克隆,避免了重新执行构造过程步骤)
- 克隆类似于new,但是不同于new。new创建新的对象属性采用的是默认值。克隆出的 对象的属性值完全和原型对象相同。并且克隆出的新对象改变不会影响原型对象。然后, 再修改克隆对象的值。
原型模式实现
- Cloneable接口和clone方法
- Prototype模式中实现起来最困难的地方就是内存复制操作,所幸在Java中提供了 clone()方法替我们做了绝大部分事情。
例子:
1 | public abstract class Prototype { |
1 | public class ConcretePrototype extends Prototype { |
1 | public class Client { |
1 | abc |