抽象工厂设计模式

抽象工厂设计模式

. 引言
工厂方法模式每个具体工厂类只完成单个实例的创建,所以它具有很好的可扩展性。但是在现实生活中,一个工厂只创建单个产品这样的例子很少,因为现在的工厂都多元化了,一个工厂创建一系列的产品,如果我们要设计这样的系统时,工厂方法模式显然在这里不适用,然后抽象工厂模式却可以很好地解决一系列产品创建的问题,这是本专题所要介绍的内容。

  1. 模块的组成
    可以看出,在抽象工厂模式的结构图有以下角色:
    (1)、抽象产品类角色:为抽象工厂中相互依赖的每种产品定义抽象接口对象,也可以这样说,有几种产品,就要声明几个抽象角色,每一个抽象产品角色和一种具体的产品相匹配。

    (2)、具体产品类:具体产品类实现了抽象产品类,是针对某个具体产品的实现的类型。

    (3)、抽象工厂类角色:定义了创建一组相互依赖的产品对象的接口操作,每种操作和每种产品一一对应。

    (4)、具体工厂类角色:实现抽象类里面的所有抽象接口操作,可以创建某系列具体的产品,这些具体的产品是“抽象产品类角色”的子类。

  2. 具体的代码

namespace DesignPattern
{
    /// 
    /// 排骨抽象类
    /// 
    public abstract class PaiGu
    {
        public abstract void print();
    }
        /// 
    /// 猪蹄抽象类
    /// 
    public abstract class ZhuTi
    {
        public abstract void print();
    }
     /// 
    /// 河南排骨
    /// 
    public class HeNanPaiGu : PaiGu
    {
        public override void print()
        {
            Console.WriteLine("河南香辣排骨");
        }
    }
     /// 
    /// 苏州排骨
    /// 
    public class SuZhouPaiGu : PaiGu
    {
        public override void print()
        {
            Console.WriteLine("苏州清蒸排骨");
        }
    }
    /// 
    /// 苏州猪蹄
    /// 
    public class SuZhouZhuTi : ZhuTi
    {
        public override void print()
        {
            Console.WriteLine("苏州猪蹄");
        }
    }
    /// 
    /// 河南猪蹄
    /// 
    public class HeNanZhuTi : ZhuTi
    {
        public override void print()
        {
            Console.WriteLine("河南红烧猪蹄");
        }
    }
     /// 
    /// 抽象工厂类
    /// 
    public abstract class AbstractFactory
    {
        public abstract ZhuTi CreateZhuTi();
        public abstract PaiGu CreatePaiGu();
    }
     /// 
    /// 河南工厂
    /// 
    public class HeNanFactory : AbstractFactory
    {
     public override PaiGu CreatePaiGu()
        {
            return new HeNanPaiGu();
        }
             public override ZhuTi CreateZhuTi()
        {
            return new HeNanZhuTi();
        }
    }
     /// 
    /// 苏州工厂
    /// 
         public class SuZhouFactory : AbstractFactory
    {
     public override PaiGu CreatePaiGu()
        {
            return new SuZhouPaiGu();
        }
              public override ZhuTi CreateZhuTi()
        {
            return new SuZhouZhuTi();
        }
    }
     /// 
    /// 实现
    /// 
    public class AbstractFactoryMode
    {
            public static void Main(string[] args)
        {
         //河南
          AbstractFactory heNanFactory = new HeNanFactory();
            PaiGu heNanpaiGu = heNanFactory.CreatePaiGu();
            ZhuTi heNanzhuTi = heNanFactory.CreateZhuTi();
            heNanpaiGu.print();
            heNanzhuTi.print();
            //苏州
             AbstractFactory suZhouFactory = new SuZhouFactory();
            ZhuTi suzhouZhuti = suZhouFactory.CreateZhuTi();
            PaiGu suZhouPaiGu = suZhouFactory.CreatePaiGu();
            suzhouZhuti.print();
            suZhouPaiGu.print();
            Console.ReadKey();
                   }
    }
}

4. 优缺点
优点:抽象工厂对于系列产品的变化支持 “开放——封闭”原则(指的是要求系统对扩展开放,对修改封闭),扩展起来非常简便,
缺点: 抽象工厂对于添加【新产品】这种情况就不支持”开放——封闭 “原则,这也是抽象工厂的缺点所在

你可能感兴趣的:(设计模式,抽象工厂设计模式)