文集地址
概述
- 原型模式隶属于创建型模式,主要是用于创建重复的对象,但每个对象都具有独立的内存地址与指针,互不关联,修改其中一个对象的属性,其他对象不会做出改变。
原型模式与工厂模式有什么区别
- 工厂模式是生产的都是同一个对象,若在工厂内修改对象,那所有通过工厂创建的对象都将改变
- 原型模式将一个对象复制成多个,每个对象都可以更改而不影响其他对象
优缺点
- 优点:无需再一个对象上频繁更改,由于每个对象都是独立的,所以可以避免构造函数的约束。
- 缺点:由于是复制出来的对象,他们的大体思路都是一致的,只是有细微的差别,不符合高内聚低耦合原则(个人觉得官方没这么写)
简单应用
/**
* 原型抽象对象
* @author ext.liuyan10
* @date 2021/2/7 14:06
*/
public abstract class Prototype implements Cloneable{
protected String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Prototype(String name) {
this.name = name;
}
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
/**
* 抽象对象实现
* @author ext.liuyan10
* @date 2021/2/7 14:06
*/
public class ConcretePrototype extends Prototype {
public ConcretePrototype(String name) {
super(name);
}
public void printingName(){
System.out.println(this.name);
}
}
/**
* @author ext.liuyan10
* @date 2021/2/7 11:31
*/
public class PrototypeApp {
public static void main(String[] args) {
ConcretePrototype prototype = new ConcretePrototype("初始对象");
prototype.printingName();
for (int i = 0; i < 2; i++) {
try {
if (prototype.clone() instanceof ConcretePrototype) {
ConcretePrototype clone = (ConcretePrototype) prototype.clone();
clone.setName("克隆对象"+i);
prototype.printingName();
clone.printingName();
}
} catch (CloneNotSupportedException e) {
System.err.println(e.toString());
}
}
}
}
初始对象
初始对象
克隆对象0
初始对象
克隆对象1
Disconnected from the target VM, address: '127.0.0.1:50185', transport: 'socket'
Process finished with exit code 0
网友评论