创建型模型——抽象工厂模式

   前提

  前面我们学习到了简单工厂模式工厂方法模式,简单工厂随着新产品的增加需要增加额外代码,工厂方法模式解决了简单工厂这一缺点,它根据新增加具体的产品类,创建具体工厂类,生产具体产品,实现了很好的扩展性,可见工厂模式中的工厂只能创建某种具体的一种产品,而无法创建一系列的产品,那该如何是好?可见抽象工厂的出现解决了这个问题。

 

 抽象工厂模式介绍

   我们假期的时候在学校学习,每到了饭点的时间,我就想吃大棚子子里面的鸡肉,我发愁啊发愁,我是去吃吉吉向上呢,还是吃脆皮鸡盖饭呢?吉吉向上我吃沙拉味道的鸡肉呢,还是吃黑胡椒味道的呢,脆皮鸡我是吃沙拉味道的呢,还是吃黑胡椒味道的呢?

吉吉向上类 沙拉味 黑胡椒
脆皮鸡类 沙拉味 黑胡椒

可见两种不同的商店,两种不同的做法,一个具体的工厂可以产生不同类型的产品,这些产品构成了产品族。那么这样我们可以享受到四种口味的鸡肉。

 class Program
    {
        static void Main(string[] args)
        {
            //吉吉向上店两种口味的鸡肉
            FoodFactory JJXSFactory = new JiJiFactory();
            ShaLa jiji= JJXSFactory.Chicken();
            jiji.Print();
            Black CP = JJXSFactory.Meat();
            CP.Print();
            //脆皮鸡店两种口味的鸡肉
            FoodFactory CPFactory = new CuiPiChicken();
            ShaLa CPSL = CPFactory.Chicken();
            jiji.Print();
            Black HHJCP = CPFactory.Meat();
            CP.Print();
        }
    } 
    public  abstract class FoodFactory//食物工厂,提供给吉吉向上和脆皮鸡两个工厂两种口味的鸡肉接口
    {
        public abstract ShaLa Chicken ();//抽象沙拉味鸡肉接口
        public abstract Black Meat();//抽象黑胡椒味鸡肉接口
    }
    //吉吉向上工厂继承食物工厂,并进行方法的重写
    public class JiJiFactory : FoodFactory
    {
        public override ShaLa Chicken()//沙拉味鸡肉进行方法重写
        {
            return new CuiSLMeat();
        }
        public override Black Meat()//对黑胡椒鸡肉进行方法重写
        {
            return new CuiBlackMeat();
        }
    }
    
    //脆皮鸡工厂继承食物工厂,并进行方法的重写
    public  class CuiPiChicken : FoodFactory
    {
        public override ShaLa Chicken()
        {
            return new CuiSLMeat();
        }
        public override Black Meat()
        {
            return new CuiBlackMeat();
        }
    }

    public abstract class Black//黑胡椒味鸡肉抽象类,提供给吉吉向上和脆皮鸡工厂
    {
        public abstract void Print();//输出信息
    }

    public abstract class ShaLa//沙拉味鸡肉抽象类,提供给吉吉向上和脆皮鸡工厂
    {
        public abstract void Print();//输出信息
    }

    public class JiBlackMeat : Black//吉吉向上店的黑胡椒口味鸡肉
    {
        public override void Print()
        {
            Console.WriteLine("黑胡椒味吉吉向上");
        }
    }
    public class CuiBlackMeat : Black//脆皮鸡店的黑胡椒口味的鸡肉
    {
        public override void Print()
        {
            Console.WriteLine("黑胡椒味脆皮鸡");
        }
    }

    public class JISLMeat : ShaLa//吉吉向上店沙拉味的鸡肉
    {
        public override void Print()
        {
            Console.WriteLine("沙拉味吉吉向上");
        }
    }
    public class CuiSLMeat : ShaLa//脆皮鸡店沙拉味的鸡肉
    {
        public override void Print()
        {
            Console.WriteLine("沙拉味脆皮鸡");
        }
    }

抽象工厂模式结构图



抽象工厂模式解析:

我们可以大致分为四个模块来理解:分别为抽象工厂、具体工厂、抽象产品、具体产品,分清他们的职责即可容易理解

抽象工厂:创建一系列产品,一个产品一个方法


具体工厂:继承抽象工厂,实现产品方法


抽象产品:声明了产品的方法

具体产品:实现抽象产品的方法


总结

  优点:具体工厂可创建一系列的产品族。

  缺点: 每个具体增加产品是一系列的产品,这一系列产品具有等级关系,当再次增加某一种产品时,需要对原有的系统进行大规模修改。违背了开闭原则。

 适用场景: 同一个产品系的产品一起使用,产品等级结构稳定,设计完成之后,不可独立增加具体产品。


  关于创建模型模型中的三大工厂模式就先学习到这里,他们有各自的优缺点,简单工厂模式——工厂模式模式——抽象工厂模式,根据前者的不足,后者弥补其缺点,层层递进。目前小编学习理解尚浅,希望路过的小哥哥小姐姐多多指点。

 

猜你喜欢

转载自blog.csdn.net/fjxcsdn/article/details/80310633