标签:
把具体实现推迟到子类中,工厂类不在负责产品的创建,只是给出具体工厂必须实现的接口。
上篇说过,简单工厂的方法其实是违反了设计原则的。所以我们就把味多美这个工厂类抽象一下,并且派生专门做某种蛋糕的工厂。
这样在添加新的程序的时候就不会再需要修改味多美这个工厂类了。
回顾一下剧情:
小明是高中的小屌丝,她喜欢隔壁班的女神王小花。结果迟迟不敢表白。
今天正好赶上王小花的生日,小明打算买去味多美个蛋糕给她吃,讨好一下。但是这次小明知道一个专门做黑森林蛋糕的味多美。打算去这家味多美去买。
首先任何味多美都会卖蛋糕,区别只是是不是专卖。所以我们把卖蛋糕这个方法进行一下抽象操作
public abstract class WeiDuoMei { public abstract Cake Buy(); }
接下来,我们创建两个专卖店。一个是黑森林专卖,一个是天使蛋糕专卖
public class BlackForestWeiDuoMei : WeiDuoMei { public override Cake Buy() { return new BlackForestCake(); } } public class AngleWeiDuoMei : WeiDuoMei { public override Cake Buy() { return new AngleCake(); } }
这样工厂类的修改就完成了,再添加新的专卖店就不会进行修改了。接着,我们修改一下小明同学的方法
public class SomeMing { //讲话 public void Speak(string strText) { Console.WriteLine("小明说:" + strText); } //买蛋糕 public void BuyCake() { WeiDuoMei wdm = new BlackForestWeiDuoMei(); Cake cake = wdm.Buy(); cake.Eat(); } }
小明同学初始一个黑森林蛋糕专卖店,接着在这个专卖店进行购买操作。此时方法实现就已经推迟到子类操作了。
这就是工厂模式。
工厂模式把实现产品方法推迟到了子类。符合设计原则中的开闭原则。
常用场景:希望用户指定工厂和产品。不同的工厂和产品可以提供不同的功能。
选择关键点:工厂和产品类是否同生共灭
By~
标签:
原文地址:http://www.cnblogs.com/chenxygx/p/4983743.html