读书人

创造型原型模式

发布时间: 2013-01-26 13:47:03 作者: rapoo

创建型—原型模式

创造型—原型模式

上图为原型模式UML图型

概述 类和对象

类是同类对象的抽象集合,类就是创建这类对象的模板。举例:世界每个人都是一个具体的对象,我们都是人,但是,我们又不是同一个对象,不同之处就是我们的外在属性值,但是,从本质说人和人是相同,对人从行为属性的上进行抽象就有了人类。

原型模式的目的

我们用一个类实例化不同的对象的时候,我们一般都是通过构造函数来产生,如果十分的确定现在将来,我们只用一个类实例化几个不同的对象,那么无需用什么原型模型,意义不大,但是,如果我们用多个类,实例化多个对象,这个时候就要注意了,通过构造函数的机制实例化对象的时候,是一个低效率的事,为了解决这个问题,我们用原型模式的方法来解决。

原型模式

原型模式就是用一个已有对象创建另外一个同类但不同对象的对象(可定制)。通俗点说:类中要有一个方法(名称自定,一般为Clone),这个方法可以拷贝自己。由于这种方法用的概率非常的大,所以在IDE中,人家专门设置了一个类(具体形式为接口或抽象类),这个类里面一般就有一个东西:抽象方法(拷贝自己,子类具体实现)。在个类在.net中的具体体现是system命名空间中的ICloneable接口,在上图的具体体现为:Prototype,有很多类(可以是一个)实现该接口,加这个类的好处具体就不说了

(C#)在具体类中的方法中,会用到MemberWiseClone()方法,这个是object(所有类的父类)中本身有的方法,这个方法是一个浅复制。浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。深复制把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。

对于浅复制就直接运用上述方法就行,但有时候会运用到深复制。描述:A类中属性为B类对象,要对A进行深复制大概的机理就是这样:B类中写一个浅复制的方法,A类中加一个私有的构造函数(调用B类实例对象中的方法实现复制),此时的构造函数有两个功能:1、实例化自己的一个对象;通过B类对象复制一个B类对象。

总结

理解MemberwiseClone()方法;理解ICloneable接口;理解深复制。原型模式就是运用面向对象的思想更加高效的实现对象拷贝自己。它和工厂方法是不同的,工厂模式针对的是类:主要为类的扩展(简单工厂),类的灵活性(工厂方法),类的易维护(抽象工厂),而原型模式针对的是类的对象。

注意:上面说工厂模式的作用是本人理解他们在其适应的条件下所产生的最重要的意义,详细请看工厂模式。

读书人网 >软件架构设计

热点推荐