首页 > 编程知识 正文

抽象工厂设计模式的优缺点,抽象工厂设计模式有哪些

时间:2023-05-05 03:54:29 阅读:245766 作者:2284

抽象工厂设计模式

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

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

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

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

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

具体的代码

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。