设计模式-原型模式(prototype-pattern)

核心:实现或者继承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去获取这个对象的克隆


猜你喜欢

转载自blog.csdn.net/Coder_Joker/article/details/80489645