设计模式之三:抽象工厂模式
抽象工厂模式(Abstract Factory Pattern):
定义:Provide an interface for creating families of related or dependent objects without specifying their concrete classes.(为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类)。
图:
优点:
1、抽象工厂模式隔离了具体类的生产,使得客户并不需要知道什么被创建。
2、当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
3、增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。
缺点:
扩展非常困难
实现:
抽象产品类1
/// <summary> /// Product族1,KFC食品 /// </summary> public abstract class KFCFood { public abstract void Display(); }
产品类1的实现类:鸡腿
public class Chicken : KFCFood { public override void Display() { Console.WriteLine("鸡腿 + 1"); } }
产品类1的实现类:鸡翅
public class Wings : KFCFood { public override void Display() { Console.WriteLine("鸡翅 + 1"); } }
抽象产品类2
/// <summary> /// Product族2,KFC饮料 /// </summary> public abstract class KFCDrink { public abstract void Display(); }
抽象产品类2的实现类 :可乐
public class Coke : KFCDrink { public override void Display() { Console.WriteLine("可乐 + 1"); } }
抽象产品类2的实现类:咖啡
public class Coffee : KFCDrink { public override void Display() { Console.WriteLine("咖啡 + 1"); } }
抽象工厂类:
/// <summary> /// 抽象工厂,生产套餐 /// </summary> public interface IKFCFactory { KFCFood CreateFood(); KFCDrink CreateDrink(); } }
产品等级1的实现类: 经济型套餐
/// <summary> /// 经济型套餐,包括鸡翅和可乐 /// </summary> public class CheapPackageFactory : IKFCFactory { public KFCFood CreateFood() { return new Wings(); } public KFCDrink CreateDrink() { return new Coke(); } }
产品等级2的实现类:豪华型套餐
/// <summary> /// 豪华型套餐,包括鸡腿和咖啡 /// </summary> public class LuxuryPackageFactory : IKFCFactory { public KFCFood CreateFood() { return new Chicken(); } public KFCDrink CreateDrink() { return new Coffee(); } }
场景实现:
class Program { static void Main(string[] args) { IKFCFactory factory = new CheapPackageFactory(); KFCFood food = factory.CreateFood(); food.Display(); KFCDrink drink = factory.CreateDrink(); drink.Display(); } }
好了,这一章就写到这,欢迎大家加入QQ群:280993838 。或者关注我的公众号:
posted on 2017-01-18 17:23 Zander_zhang 阅读(166) 评论(0) 编辑 收藏 举报