模式之--原型(Prototype)未完

来源:互联网 发布:淘宝助理怎么添加水印 编辑:程序博客网 时间:2024/05/18 02:56

行为目的:
通过对类实例的复制,得到一个新的实例。

问题起源:

实际应用中,如果需要创建的类其实例过程很昂贵和很复杂时,且需要的新实例相比之前的实例属性区别不多时,我们就可以通过复制已有的实例来得到一个新的实例,就使用原型模式。

使用情况:

在系统运行与其类的创建,组合,操作等相互独立的情况下,如果类是在运行中实例化的,比如动态加载,或者需要实例化的类对于不同的状态其属性只有很小的变化。这种情况下有必要保存类初始实例,后续根据初始实例复制创建新的实例。

UML结构框图:

UML框图说明:

使用说明:

客户类要求复制得到实例类

模式优缺点:

1)向客户隐藏制造新实例的复杂性,提供让客户能够产生未知对象的选项;
2)在某些情况下,复制对象比创建对象更有效。
3)在运行中创建和销毁对象。原型可使客户在运行中创建和销毁对象,相比其他创建型模式,将变得更加灵活。
4)对复制后对象结构和属性的更改,就可以非常容易的得到一个不一样的实例。
5)有时,对象的复制将相当麻烦。

实现细节:

1)在软件运行过程中,如果存在比较多的原型需要动态创建和销毁,建议创建单独的原型管理类进行组织。
2)实现Cloneable接口。并覆盖clone方法。

示例代码:

Java类库中的使用:

关联模式:

原型与抽象工厂在某些情况下可以互相替换使用的,也可以一起使用,抽象工厂可以通过保存类的原型,在创建类的时候,得到原型的一个拷贝。
原型模式也通常与组合(Composite),适配器模式(Decorator)搭配使用。

0 0