原型模式 C#

来源:互联网 发布:验证码java 编辑:程序博客网 时间:2024/05/28 03:02

(微信原文:http://mp.weixin.qq.com/s/1LzSkaSgMIqE44CNLYgY8A )

首先介绍一下原型模式,原型模式是软件开发中常用的一种设计模式,是指用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。其本质就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。

    原型模式的应用:在黑客帝国中,反派机器人不断通过复制自身来达到新机器人的产生,需要新机器人时,就对原型进行Clone一份,来产生一个和原型相同或者相似的新对象,或者说用原型实例指定创建对象的种类,并且通过复制这些原型来创建新的对象。

    原型模式的程序结构图:


实现代码如下所示:

  1. 原型类


  2. 具体原型类


  3. 客户端代码



        ​在.NET中可以很容易地通过实现ICloneable接口(这个接口就是原型,提供克隆方法,相当于与上面代码中MonkeyKingPrototype抽象类)中Clone()方法来实现原型模式,如果我们想我们自定义的类具有克隆的功能,首先定义类继承与ICloneable接口并实现Clone方法.
      我们依据细胞的自我复制使用程序实现原型模式:
      实现细胞类
      客户端调用:


    ​从上图图可以看出,在客户端中需要创建不同功能的其它细胞时,并不需要每次都去调用Cells类的构造函数(每调用一次构造函数,就需要New一个对象,如果构造函数的时间很长,那么,每次需要实例化新对象就会消耗过多的性能,所以,使用克隆是最好的解决办法,既隐藏了对象的实例化过程,又大大的提高了性能)。当然,原型模式也具有一定的优缺点。

    ​使用原型模式的优点:   ​

1.原型模式向客户隐藏了创建新实例的复杂性

2.原型模式允许动态增加或较少产品类。

3.原型模式简化了实例的创建结构,工厂方法模式需要有一个与产品类等级结构相同的等级结构,而原型模式不需要这样

4.产品类不需要事先确定产品的等级结构,因为原型模式适用于任何的等级结构

    ​缺点

    ​每个类都需要有一个Clone(克隆自身的方法)

    ​