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

来源:互联网 发布:王者荣耀 英雄成长数据 编辑:程序博客网 时间:2024/05/22 03:29
设计模式之三:抽象工厂模式
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、增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。

       缺点:
        扩展非常困难

      实现:
抽象产品类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>[/font][/color]   ///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()       {           returnnew Wings();       }       public KFCDrink CreateDrink()       {           returnnew Coke();       }   }


产品等级2的实现类:豪华型套餐
      
///<summary>    ///豪华型套餐,包括鸡腿和咖啡    ///</summary>    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();                 }   }


?


0 0