【IT168技术文档】
在软件系统中,有时候面临的产品类是动态变化的,而且这个产品类具有一定的等级结构。这时如果用工厂模式,则与产品类等级结构平行的工厂方法类也要随着这种变化而变化,显然不大合适。那么如何封装这种动态的变化?从而使依赖于这些易变对象的客户程序不随着产品类变化?
意图
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
结构图
生活中的例子
Prototype模式使用原型实例指定创建对象的种类。新产品的原型通常是先于全部产品建立的,这样的原型是被动的,并不参与复制它自己。一个细胞的有丝分裂,产生两个同样的细胞,是一个扮演主动角色复制自己原型的例子,这演示了原型模式。一个细胞分裂,产生两个同样基因型的细胞。换句话说,细胞克隆了自己。
原型模式解说
我们考虑这样一个场景,假定我们要开发一个调色板,用户单击调色板上任一个方块,将会返回一个对应的颜色的实例,下面我们看看如何通过原型模式来达到系统动态加载具体产品的目的。
很自然,我们利用OO的思想,把每一种颜色作为一个对象,并为他们抽象出一个公用的父类,如下图:
实现代码: public abstract class Color { public abstract void Display(); } public class RedColor:Color { public override void Display() { Console.WriteLine("Red's RGB Values are:255,0,0"); } } public class GreenColor:Color { public override void Display() { Console.WriteLine("Green's RGB Values are:0,255,0"); } }