设计模式之三:抽象工厂模式

     抽象工厂模式(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编辑  收藏  举报

导航