温故而知新(2):分享设计模式(原型模式、工厂方法、建造者模式)
原型模式(Protype)
本案例:以淘宝快捷回复消息为例。
您可以尝试取消程序中的messageAbstract = messageAbstract.Clone(false);的这条语句试试。
适用性
在下列情况下,应当使用Prototype模式:
- 当一个系统应该独立于它的产品创建,构成和表示时;
- 当要实例化的类是在运行时刻指定时,例如,通过动态装载;
- 为了避免创建一个与产品类层次平行的工厂类层次时;
- 当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。
本实例用到的cs文件是:Byebye.cs、FAQ.cs、Hi.cs、MessageAbstract.cs、Taobao.cs、MessageCollection.cs
其中 MessageCollection.cs 是额外的。通常用原型的时候,可能会遇到集合,所以,我们这里特意提供了一个集合。仅供参考。
关于Clone,您可以在网上搜索一下他的解释
工厂方法模式(Factory Method)
核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
抽象工厂中,负责工厂的实例创建。而工厂方法模式,则不再负责创建,它里面仅提供了一个抽象产品方法,供各个工厂子类自己去实现。
要吃汉堡的客户(客户端),自行选择要去肯德基还是麦当劳。然后购买。
创建者模式(Builder)
本案例:以生产汽车为例。汽车由引擎和轮胎组成。
CarBuilder类负责组合成完整的汽车
Engine类和Tires类,是具体的产品类。分别是引擎和轮胎产品。
从UML图中,我们会看到CarDirecotr应该是一个“聚合列表”。但是在本案例中,我们只生产了一辆车。理论上应该是IList<Car> cars=new List<Car>()的集合列表的。
源码下载:

