原型模式-prototype
故事:
美女:“每天化妆都要花一两个小时,好麻烦啊。”
帅哥:“如果可以复制就可以节省很多时间了。”
类图:
思考:
原型模式我认为是最容易理解与记忆的模式,使用频率还挺高的。其实就是实现Cloneable接口,这就相当于“标记了”我们可以使用clone方法。值得注意的是,克隆分为深克隆和浅克隆的,当一个类中只存在基本数据类型和String的时候,我们用浅克隆就可以了;如果属性里面包含了引用类型的对象、集合或者数组,我们就需要重写克隆方法。
伪代码:
/**
*化妆实现Cloneable
*/
public interface MakeUp extends Cloneable {
void style(String s);
}
/**
*Lip口红实现化妆MakeUp接口
* @author 康康的远方
* @date 2021/4/5
*/
public class Lip implements MakeUp {
private String lip;
@Override
public Lip clone() throws CloneNotSupportedException {
return (Lip) super.clone();
}
@Override
public void style(String style) {
this.lip = style;
}
}
/**
* 美女克隆化妆
* @author 康康的远方
* @date 2021/4/5
*/
public class Beauty {
public static void main(String[] args) {
Lip lightMakeUp = new Lip();
lightMakeUp.style("red");
try {
Lip clone = lightMakeUp.clone();
clone.style("pink");
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
总结:
应用场景:当构造行数里面有很多参数的时候,我们不想重新new一个对象,可以在原来的对象clone,并修改需要变动的属性。
使用clone方法是不调用构造函数的,所以原型模式和单例模式是对立的。原型模式会破坏单例模式,因此二者只能存在一个。