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

     抽象工厂模式(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 。或者关注我的公众号:

 

 

转载于:https://www.cnblogs.com/Zander-1349547081/p/6297519.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值