抽象工厂设计模式

抽象工厂设计模式

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

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

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

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

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

  2. 具体的代码

namespace DesignPattern
{
    /// <summary>
    /// 排骨抽象类
    /// </summary>
    public abstract class PaiGu
    {
        public abstract void print();
    }
        /// <summary>
    /// 猪蹄抽象类
    /// </summary>
    public abstract class ZhuTi
    {
        public abstract void print();
    }
     /// <summary>
    /// 河南排骨
    /// </summary>
    public class HeNanPaiGu : PaiGu
    {
        public override void print()
        {
            Console.WriteLine("河南香辣排骨");
        }
    }
     /// <summary>
    /// 苏州排骨
    /// </summary>
    public class SuZhouPaiGu : PaiGu
    {
        public override void print()
        {
            Console.WriteLine("苏州清蒸排骨");
        }
    }
    /// <summary>
    /// 苏州猪蹄
    /// </summary>
    public class SuZhouZhuTi : ZhuTi
    {
        public override void print()
        {
            Console.WriteLine("苏州猪蹄");
        }
    }
    /// <summary>
    /// 河南猪蹄
    /// </summary>
    public class HeNanZhuTi : ZhuTi
    {
        public override void print()
        {
            Console.WriteLine("河南红烧猪蹄");
        }
    }
     /// <summary>
    /// 抽象工厂类
    /// </summary>
    public abstract class AbstractFactory
    {
        public abstract ZhuTi CreateZhuTi();
        public abstract PaiGu CreatePaiGu();
    }
     /// <summary>
    /// 河南工厂
    /// </summary>
    public class HeNanFactory : AbstractFactory
    {
     public override PaiGu CreatePaiGu()
        {
            return new HeNanPaiGu();
        }
             public override ZhuTi CreateZhuTi()
        {
            return new HeNanZhuTi();
        }
    }
     /// <summary>
    /// 苏州工厂
    /// </summary>
         public class SuZhouFactory : AbstractFactory
    {
     public override PaiGu CreatePaiGu()
        {
            return new SuZhouPaiGu();
        }
              public override ZhuTi CreateZhuTi()
        {
            return new SuZhouZhuTi();
        }
    }
     /// <summary>
    /// 实现
    /// </summary>
    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. 优缺点
优点:抽象工厂对于系列产品的变化支持 “开放——封闭”原则(指的是要求系统对扩展开放,对修改封闭),扩展起来非常简便,
缺点: 抽象工厂对于添加【新产品】这种情况就不支持”开放——封闭 “原则,这也是抽象工厂的缺点所在

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想家NO1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值