建造者模式
概念
Builder Design Pattern
场景
类的构造函数必填属性很多,通过set设置,没有办法校验必填属性
如果类的属性之间有一定的依赖关系,构造函数配合set方式,无法进行依赖关系和约束条件校验
需要创建不可变对象,不能暴露set方法。<br>(前提是需要传递很多的属性,如果属性很少,可以不需要建造者模式)
实现方式
把构造函数定义为private,定义public static class Builder 内部类,通过Builder 类的set方法设置属性,调用build方法创建对象。<br>
与工厂模式的区别
工厂模式:创建不同的同一类型对象(集成同一个父类或是接口的一组子类),由给定的参数来创建哪种类型的对象;
建造者模式:创建一种类型的复杂对象,通过很多可设置参数,“定制化”的创建对象
示例
Java Calendar类 内部类Builder实现了建造者模式。
Google Guava CacheBuilder
原型模式
概念
Prototype Design Pattern
如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),在这种情况下,我们可以利用对已有对象(原型)进行复制(或者叫拷贝)的方式来创建新对象,以达到节省创建时间的目的。这种基于原型来创建对象的方式就叫作原型设计模式(Prototype Design Pattern),简称原型模式。
实现方式
浅拷贝:浅拷贝只会复制对象地址
深拷贝:深拷贝会复制对象本身