创建型模式之原型模式

 
 
一.定义
  原型模式是创建型模式的一种,其特点在于通过“复制”一个已经存在的实例来返回新的实例,而不是新建实例。被复制的实例就是我们所称的“原型”,这个原型是可定制的。
  
二、模式结构成员构成

原型模式包含如下角色:

• Prototype:原型 

  声明克隆自己的接口

• ConcretePrototype:具体原型

  实现克隆自己的操作

• Client:客户

  要求原型克隆自己,生成新的对象

三.代码示例
 
/**
 *  Prototype Class
 *  原型类
 */
public class Cookie implements Cloneable {
   
    @Override
    public Object clone() throws CloneNotSupportedException
    {
        //In an actual implementation of this pattern you would now attach references to
        //the expensive to produce parts from the copies that are held inside the prototype.
        return (Cookie) super.clone();
    }
 }

/**
 * Concrete Prototypes to clone
 * 具体原型
 **/
public class CoconutCookie extends Cookie {
}

/**
 * Client Class
 * 客户类
 **/
public class CookieMachine {

    private Cookie cookie;//cookie必须是可复制的

    public CookieMachine(Cookie cookie) {
        this.cookie = cookie;
    }

    public Cookie makeCookie() {
        try {
            return (Cookie) cookie.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return null;
    }


    public static void main(String args[]) {
        Cookie tempCookie = null;
        Cookie prot = new CoconutCookie();
        CookieMachine cm = new CookieMachine(prot); //设置原型
        for (int i = 0; i < 100; i++)
            tempCookie = cm.makeCookie();//通过复制原型返回多个cookie
    }
}
View Code
 
四.优点和缺点分析
优点:
 >可以很方便的克隆一个新的对象
 
缺点:
>每一个类都必须配备一个克隆方法,对已经存在的类不容易做到
 
五.应用场景
在以下情况下可以使用原型模式:
>原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效;
>创建值相等,只是命名不一样的同类数据

猜你喜欢

转载自www.cnblogs.com/756623607-zhang/p/9206805.html