本文共 2238 字,大约阅读时间需要 7 分钟。
设计模式之三:抽象工厂模式 http://www.taidous.com/thread-48169-1-1.html(出处: 【泰斗社区】-专注互联网游戏和应用的开发者平台)
抽象工厂模式(Abstract Factory Pattern): 定义:Provide an interface for creating families of related or dependent objects without specifying their concrete classes.(为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类)。 图: |
优点:
1、抽象工厂模式隔离了具体类的生产,使得客户并不需要知道什么被创建。
2、当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
3、增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。
//////Product族1,KFC食品 /// public abstract class KFCFood { public abstract void Display(); }
public class Chicken :KFCFood { public override void Display() { Console.WriteLine("鸡腿 + 1"); } }
产品类1的实现类:鸡翅
public class Wings :KFCFood { public override void Display() { Console.WriteLine("鸡翅 + 1"); } }
抽象产品类2
///[/font][/color] ///Product族2,KFC饮料 /// public abstract class KFCDrink { public abstract void Display(); }
public class Coke :KFCDrink { public override void Display() { Console.WriteLine("可乐 + 1"); } }
public class Coffee :KFCDrink { public override void Display() { Console.WriteLine("咖啡 + 1"); } }
/// ///抽象工厂,生产套餐 /// public interface IKFCFactory { KFCFood CreateFood(); KFCDrink CreateDrink(); }}
//////经济型套餐,包括鸡翅和可乐 /// public class CheapPackageFactory :IKFCFactory { public KFCFood CreateFood() { returnnew Wings(); } public KFCDrink CreateDrink() { returnnew Coke(); } }
/// ///豪华型套餐,包括鸡腿和咖啡 /// public class LuxuryPackageFactory :IKFCFactory { public KFCFood CreateFood() { returnnew Chicken(); } public KFCDrink CreateDrink() { returnnew Coffee(); } }
class Program { static void Main(string[] args) { IKFCFactory factory =new CheapPackageFactory(); KFCFood food =factory.CreateFood(); food.Display(); KFCDrink drink =factory.CreateDrink(); drink.Display(); } }