核心:实现或者继承Cloneable(提示接口,无其他作用)
原型模式大致有两种形式:
1.普通模式
2.登记模式
顾名思义:普通模式,就是简单的clone()方法 ,登记模式呢则有一个公共的manager管理类管理着所有需要登记的类,当需要的时候直接从管理类中clone返回
学设计模式最重要的莫过于画uml图了:
具体代码:
interface MyCloneAble extends Cloneable
{
Object clone() throws CloneNotSupportedException;
}
class ConcreteOne implements MyCloneAble
{
public String type;
@Override
public Object clone() throws CloneNotSupportedException
{
return (ConcreteOne)super.clone();
}
}
class ConcreteTwo implements MyCloneAble
{
public Integer year;
@Override
public Object clone() throws CloneNotSupportedException
{
return (ConcreteTwo)super.clone();
}
}
class StoreManager
{
private Map<String, MyCloneAble>objStorage;
public StoreManager()
{
this.objStorage=new HashMap<>();
}
public void store(String key,MyCloneAble obj)
{
objStorage.put(key, obj);
}
public MyCloneAble get(String key) throws CloneNotSupportedException
{
return (MyCloneAble) objStorage.get(key).clone();
}
}
什么场景需要用到原型模式呢:
1.产生一个对象太麻烦的时候,试想一下生成一个对象,其中这个对象需要进行复杂的运算,for循环1w次(夸大的说) ,那每次都需要new吗,这多麻烦,这时候就可以采用原型模式了
2.当需要管理多个对象的时候,同时多个对象又不知道具体谁是谁,具体例子就是上述的登记形式,用户通过key去获取这个对象的克隆