创建型模式之原型模式
一.定义
原型模式是创建型模式的一种,其特点在于通过“复制”一个已经存在的实例来返回新的实例,而不是新建实例。被复制的实例就是我们所称的“原型”,这个原型是可定制的。
二、模式结构成员构成
原型模式包含如下角色:
• 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 } }
四.优点和缺点分析
优点:
>可以很方便的克隆一个新的对象
缺点:
>每一个类都必须配备一个克隆方法,对已经存在的类不容易做到
五.应用场景
在以下情况下可以使用原型模式:
>原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效;
>创建值相等,只是命名不一样的同类数据
你投入得越多,就能得到越多得价值