第6章 抽象工厂模式

合集下载

抽象工厂模式的优缺点和适用场景

抽象工厂模式的优缺点和适用场景

抽象⼯⼚模式的优缺点和适⽤场景
抽象⼯⼚模式的优点
抽象⼯⼚模式除了具有⼯⼚⽅法模式的优点外,最主要的优点就是可以在类的内部对产品族进⾏约束。

所谓的产品族,⼀般或多或少的都存在⼀定的关联,抽象⼯⼚模式就可以在类内部对产品族的关联关系进⾏定义和描述,⽽不必专门引⼊⼀个新的类来进⾏管理。

抽象⼯⼚模式的缺点
产品族的扩展将是⼀件⼗分费⼒的事情,假如产品族中需要增加⼀个新的产品,则⼏乎所有的⼯⼚类都需要进⾏修改。

所以使⽤抽象⼯⼚模式时,对产品等级结构的划分是⾮常重要的。

适⽤场景
当需要创建的对象是⼀系列相互关联或相互依赖的产品族时,便可以使⽤抽象⼯⼚模式。

说的更明⽩⼀点,就是⼀个继承体系中,如果存在着多个等级结构(即存在着多个抽象类),并且分属各个等级结构中的实现类之间存在着⼀定的关联或者约束,就可以使⽤抽象⼯⼚模式。

假如各个等级结构中的实现类之间不存在关联或约束,则使⽤多个独⽴的⼯⼚来对产品进⾏创建,则更合适⼀点。

总结
⽆论是简单⼯⼚模式,⼯⼚⽅法模式,还是抽象⼯⼚模式,他们都属于⼯⼚模式,在形式和特点上也是极为相似的,他们的最终⽬的都是为了解耦。

在使⽤时,我们不必去在意这个模式到底⼯⼚⽅法模式还是抽象⼯⼚模式,因为他们之间的演变常常是令⼈琢磨不透的。

经常你会发现,明明使⽤的⼯⼚⽅法模式,当新需求来临,稍加修改,加⼊了⼀个新⽅法后,由于类中的产品构成了不同等级结构中的产品族,它就变成抽象⼯⼚模式了;⽽对于抽象⼯⼚模式,当减少⼀个⽅法使的提供的产品不再构成产品族之后,它就演变成了⼯⼚⽅法模式。

所以,在使⽤⼯⼚模式时,只需要关⼼降低耦合度的⽬的是否达到了。

简单工厂模式、工厂模式和抽象工厂模式区别及优缺点

简单工厂模式、工厂模式和抽象工厂模式区别及优缺点

简单⼯⼚模式、⼯⼚模式和抽象⼯⼚模式区别及优缺点各位⼩伙伴好,今天给⼤家主要介绍⼀下简单⼯⼚模式、⼯⼚模式和抽象⼯⼚模式的区别及各⾃的优缺点。

(本⽂实现语⾔为Python3)【前⾔】众所周知今天所讲的内容是设计模式的⼀类;对于设计模式这个概念,我想⾸先请⼤家问问⾃⼰:1、什么是设计模式 2、我们为什么要了解并学习设计模式?从我上学的时候我相信⼤家跟我⼀样也接触过设计模式的课程,当时可能懵懵懂懂只是知其然,当时还会想明明可以直接写出来为什么要搞成这样的形式,我就算学会了它到底什么时候能⽤呢?⼀系列的问题...Emm算了到时候再想想(lazy)。

随着实践的不断增多,现在我想可以对这些问题有个初步的回答了: 1、在我看来,设计模式外在看是经过前⼈不断实践总结出的针对某些指定场景极其好⽤的⼀种代码结构设计模板;内在看其实是⼀种设计思想(即为什么他们会这么想,这样想较之其他⽅法有什么好处)。

当我们真正的理解设计思想的时候,就可能会在⾯对问题和场景时⾃然⽽然的灵活运⽤到多种设计模式,⽽不是单⼀的刻板结构。

2、在⼯程化的开发中,需求往往是会不断变化的,这也是让很多开发⼈员及其烦躁的地⽅,所以才会有开发与产品的亲密关系。

设计模式就是为了抵御外部需求变化产⽣的。

设计模式应符合开闭原则(类、模块和函数等应该对扩展开放,对修改关闭。

)⼀个好的设计在之后的开发中,包括发⽣重⼤需求变化的时候,往往代码只需要进⾏简单重构去进⾏适配,⽽不是通过打补丁的⽅式去堆砌,也很容易避免破窗效应,充分的发挥了灵活的扩展和适配,⼤⼤增强了维护性。

综上所述,我们了解并学习设计模式,可以使我们的代码变得更加健壮、结构清晰,可以从容、灵活的适配需求变更(可复⽤、可扩展、可维护、够灵活)【正⽂】⾸先,这三种模式解决的问题是实例化对象的问题;那么为什么不直接实例化⽽⽤这样的⼯⼚形式去实例化对象呢?因为【待实例化对象太多(⼦类多且变动、调⽤频繁)或者实例化对象的过程、准备⽐较复杂】,直接实例化意味着每次都⽤重复的去执⾏实例化这个操作,如果有很多待实例化的操作,那么就要重复执⾏很多次,更不要说万⼀在实例化之前还要执⾏⼀堆配置项的初始化。

抽象模式

抽象模式

简单工厂模式优缺点
简单工厂模式优点: • 令创建与使用的代码相分离,降低了耦合性,可以独立变化
简单工厂模式缺点: 工厂类集中了所有产品创建的逻辑,会导致很复杂 将所有逻辑集中放在一个类里,当产品类有不同接口种类时, 工厂类需要判断何时创建何种产品。这种对时机的逻辑判断 与对哪种具体产品的逻辑判断混合在一起,导致扩展困难。 工厂方法为静态方法,无法由子类继承
实现独一无二的实例
如何创建一个对象?
new
一旦有一个类,是否可以多次实例化?
当然可以
如果构造函数为private呢?
可以,但在类外无法实例化
如何调用呢?
通过一个静态方法获得类的实例
public MyClass 问题解决了!! { private MyClass(){} public static MyClass GetInstance(){} } 演示示例:使用单例模式解决问题
剖析经典的单例模式
public class FrmPlayer { Singleton类 //独一无二的实例 private static FrmPlayer uniquePlayer; 利用一个静态变量来记录 //私有构造函数 Singleton类的唯一实例 private FrmPlayer() { InitializeComponent(); 构造函数声明为私有,只有 Singleton类才可以调用 } //检查并创建唯一实例 public static FrmPlayer GetInstance() { if (uniquePlayer == null) { uniquePlayer = new FrmPlayer(); } return uniquePlayer; 实例化对象,并返回 } 实例引用 }

利用案例教学法由浅入深地讲解抽象工厂模式

利用案例教学法由浅入深地讲解抽象工厂模式
I …
#一:
. .

一 … - “
舻 s




董 篡一 e … !
; 一

_ * 悯
t 一


蠢静黔 i 薄


j Leabharlann 之 , 就是这些抽象产 品的具体子类的实例 。工厂类负责创建抽 也 象 产 品 的 具 体 子类 的 实 例 。
第二 阶段 : 首先给学生提 出问题 : 口就可 以实现访 问不 同 接 的数据库我们为什么采用工厂模式 呢?原 因有两个 : 第一是 客户 提 出新需求 , 自己不改变源码就更换 为其他数据库 ; 第二是从 开 发公 司考虑 , 了适应不 同的数据库 , 为 每次需要修 改 B L层源代 L 码 , 编译程序 , 再 发布程序 比较麻烦 。 那么具体实现步骤是创建新 的工 厂项 目类 , 加类 S at y 然后在类 中实 现返 回实现产 品 添 F c r, o 接 口的 方 法 , 体 代 码 如 下 : 具
摘 要 : 文 章 主 要 阐述 了抽 象 工 厂 模 式 , 过 利 用 案 例 教 学 法进 行 讲 解 , 学 员彻 底 理 通 让 解 并会 使 用抽 象 工厂 设 计 模 式 。 关 键 词 :抽 象 工厂 模 式 ; 案例 教 学 法 ; 解 讲 中 图分 类 号 :G7 2 1 文 献 标 识 码 :A 文 章 编 号 :0 0 83 (0 03 — 17 O 10 — 1 6 1)2 0 0 一 3 2
科 学 之友
Fed f c ne m t r rn oS i c A a u i e e s
21年1月 00 1
利 用 案 例 教 学 法 由浅 入 深地 讲 解 抽 象 工厂 模 式

实验3 抽象工厂模式

实验3 抽象工厂模式
returnnewSymbin();
}
publicView produce2() {
System.out.println("2over");
returnnewAndroid2();
}
}
classSymbinFactoryimplementsFactory {
publicSymbin produce1() {
{ห้องสมุดไป่ตู้
publicvoidcreate() {
System.out.println("mac'sCPU");
}
}
classPcRAMimplementsRAM {
publicvoidcreate() {
System.out.println("winRAM");
}
}
classMacRAMimplementsRAM {
publicvoidcreate() {
System.out.println("mac'RAM");
}
}
interfaceComputerFactory {
CPU produceCPU();
RAM produceRAM();
}
classPcFactoryimplementsComputerFactory {
System.out.println("sys view");
}
}
interfaceFactory {
Contral produce1();
View produce2();
}
classPhoneFactoryimplementsFactory {

软件设计模式试题集_附答案

软件设计模式试题集_附答案

第 7 章 Adapter(适配器)模式
一.选择
1. Adapter(适配器)模式的意图是()。
A. 希望简化现有系统的使用方法。你需要定义自己的借口。
B.将一个无法控制的现有对象与一个特定借口相匹配。
C. 将一组实现部分从另一组使用它们的对象中分离出来。
D.你需要为特定的客户(或情况)提供特定系列的对象。
包容类与需要的接口相匹配,并调用被包容类的方法。
4. 请简要说明在软件设计中设计模式的作用?
软件设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的代码设计经验的总结。
使用设计模式是为了适应需求变化、可重用代码、让代码更容易被他人理解、保证代码的可靠性。
六.应用题
4. 在 Facade 模式中,客户是如何使用子系统的?
六.应用题
1. 请论述在一个系统中应用 Façade(外观)模式的必要性,并给出一种解决方案。
Façade(外观)模式不仅可以为方法调用创建更简单的接口,还可以减少客户必须处理的对象数量。举个例子。
假设有一个 Client 对象,这个对象必须处理 Database、Model、Element 类的对象。Client 必须首先通过 Database
B.为了系统中的一组功能调用提供一个一致的接口,这个接口使得这一子系统更加容易使用。
C.保证一个类仅有一个实例,并提供一个访问他的全局访问点。
D.在方法中定义算法的框架,而将算法中的一些操作步骤延迟到子类中实现。
2. Façade(外观)模式的意图是()。
A. 希望简化现有系统的使用方法,你需要定义自己的接口。
4. 内聚度
模块内部各成分彼此结合的紧密程度。

简单工厂模式,工厂方法模式和抽象工厂模式的异同

简单工厂模式,工厂方法模式和抽象工厂模式的异同

简单工厂模式,工厂方法模式和抽象工厂模式的异同简单工厂模式,工厂方法模式和抽象工厂模式都是属于创建型设计模式,这三种创建型模式都不需要知道具体类。

我们掌握一种思想,就是在创建一个对象时,需要把容易发生变化的地方给封装起来,来控制变化(哪里变化,封装哪里),以适应客户的变动,项目的扩展。

用这三种设计模式都可以实现,那究竟这三种设计模式有什么异同呢?下面根据这三者之间的特点,优点,缺点,适用范围进行比较。

一.特点简单工厂模式:专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

它又称为静态工厂方法模式。

它的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。

简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。

在这个模式中,工厂类是整个模式的关键所在。

它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。

用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。

有利于整个软件体系结构的优化。

工厂方法模式:工厂方法是粒度很小的设计模式,因为模式的表现只是一个抽象的方法。

提前定义用于创建对象的接口,让子类决定实例化具体的某一个类,即在工厂和产品中间增加接口,工厂不再负责产品的创建,由接口针对不同条件返回具体的类实例,由具体类实例去实现。

工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。

首先完全实现‘开-闭原则’,实现了可扩展。

其次实现更复杂的层次结构,可以应用于产品结果复杂的场合。

工厂方法模式是对简单工厂模式进行了抽象。

有一个抽象的Factory类(可以是抽象类和接口),这个类将不在负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。

在这个模式中,工厂类和产品类往往可以依次对应。

即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品。

【设计模式-工厂模式】男男女女的抽象工厂模式

【设计模式-工厂模式】男男女女的抽象工厂模式

【设计模式-⼯⼚模式】男男⼥⼥的抽象⼯⼚模式背景虽然⼥娲已经成功将⼈类创造出来了,可是都是没有性别的,那么后续该如何繁衍呢。

为此,除了增加⼈种外,我们还需要增加所有⼈类都有的⼀个属性:性别。

由此:⼈种和性别相互组合⽣成6中不同的⼈类男⿊⼈、⼥⿊⼈、男⽩⼈、⼥⽩⼈、男黄⼈、⼥黄⼈原来的⼀个⼋卦炉也需要进⾏修改,变为专门⽣产男性的"男⼋卦炉" 和专门⽣产⼥性的 “⼥⼋卦炉”类图可以看到我们在原有的⼏个⼈种上,⼜重新继承并实现了两个类,分别⽤于表⽰不同⼈种的男⼥特别说明的是HumanFactory接⼝,在这个接⼝中定义了三个⽅法,分别⽤于⽣产不同的肤⾊的⼈种,也就是我们将肤⾊作为Y轴,性别作为X轴,通过X坐标和Y坐标唯⼀确定⼀个⽣产出来的对象。

代码⼈种接⼝public interface Human {//每个⼈种的⽪肤都是不同的颜⾊public void getColor();//每个⼈类都会发声public void talk();public void getSex();}⼈种接⼝即抽象产品,该产品的共同属性定义:肤⾊和语⾔,⽽性别则是不同产品下更深层的细分实现⼈种接⼝的黄种⼈public abstract class AbstractYellowHuman implements Human{@Overridepublic void getColor() {System.out.println("黄种⼈");}@Overridepublic void talk() {System.out.println("国语");}}继承了该接⼝的抽象黄种⼈类,每个抽象类都会实现产品的公共细节,⽽每个抽象类的都会有两个实现类,分别实现各⾃的不同的细节:性别黄种⼈⼥性public class YellowWoman extends AbstractYellowHuman{@Overridepublic void getSex() {System.out.println("YellowWoman");}}⼋卦炉/*** 产品类* 有N个产品组,在抽象⼯⼚类中就应该有N个创建⽅法;* 每个产品有M个产品扩展维度就应该有M个产品实现⼯⼚类,* 在每个实现⼯⼚中,实现不同的产品族的⽣产任务.* @author LiPeng01* @since 2020/8/8 7:31 下午*/public interface HumanFactory {public Human doYellowHuman();public Human doWhiteHuman();public Human doBlackHuman();}在接⼝中我们可以看到 抽象的⼯⼚是可以⽣产出不同肤⾊的⼈种的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

抽象工厂模式
模式结构
抽象工厂模式
模式结构
抽象工厂模式包含如下角色: 抽象工厂模式包含如下角色:
• AbstractFactory:抽象工厂 • ConcreteFactory ConcreteFactory:具体工厂 • AbstractProduct:抽象产品 • Product:具体产品
抽象工厂模式
抽象工厂模式
模式扩展
“开闭原则”的倾斜性 开闭原则”
• “开闭原则”要求系统对扩展开放,对修改封闭,通过扩展达到增强其功 能的目的。对于涉及到多个产品族与多个产品等级结构的系统,其功能增 强包括两方面: • (1) 增加产品族:对于增加新的产品族,工厂方法模式很好的支持了“开闭 原则”,对于新增加的产品族,只需要对应增加一个新的具体工厂即可, 对已有代码无须做任何修改。 • (2) 增加新的产品等级结构:对于增加新的产品等级结构,需要修改所有的 工厂角色,包括抽象工厂类,在所有的工厂类中都需要增加生产新产品的 方法,不能很好地支持“开闭原则”。 • 抽象工厂模式的这种性质称为“开闭原则”的倾斜性,抽象工厂模式以一 种倾斜的方式支持增加新的产品,它为新产品族的增加提供方便,但不能 为新的产品等级结构的增加提供这样的方便。
抽象工厂模式
模式分析
具体工厂类的典型代码如下: 具体工厂类的典型代码如下:
public class ConcreteFactory1 extends AbstractFactory { public AbstractProductA createProductA() { return new ConcreteProductA1(); } public AbstractProductB createProductB() { return new ConcreteProductB1(); } }
抽象工厂模式
模式适用环境
在以下情况下可以使用抽象工厂模式: 在以下情况下可以使用抽象工厂模式:
• 一个系统不应当依赖于产品类实例如何被创建、组合和表达的 细节,这对于所有类型的工厂模式都是重要的。 • 系统中有多于一个的产品族,而每次只使用其中某一产品族。 • 属于同一个产品族的产品将在一起使用,这一约束必须在系统 的设计中体现出来。 • 系统提供一个产品类的库,所有的产品以同样的接口出现,从 而使客户端不依赖于具体实现。
抽象工厂模式
模式动机
抽象工厂模式示意图
抽象工厂模式
模式定义
抽象工厂模式(Abstract Factory Pattern):提供一 抽象工厂模式 : 创建一系列相关或相互依赖对象的接口, 个创建一系列相关或相互依赖对象的接口,而无须指定 它们具体的类。抽象工厂模式又称为Kit模式,属于对 它们具体的类。抽象工厂模式又称为 模式,属于对 模式 象创建型模式。 象创建型模式。
END
抽象工厂模式
模式实例与解析
实例二: 实例二:数据库操作工厂
抽象工厂模式
模式优缺点
抽象工厂模式的优点
• 抽象工厂模式隔离了具体类的生成,使得客户并不需要知道什么被创 建。由于这种隔离,更换一个具体工厂就变得相对容易。所有的具体 工厂都实现了抽象工厂中定义的那些公共接口,因此只需改变具体工 厂的实例,就可以在某种程度上改变整个软件系统的行为。另外,应 用抽象工厂模式可以实现高内聚低耦合的设计目的,因此抽象工厂模 式得到了广泛的应用。 • 当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端 始终只使用同一个产品族中的对象。这对一些需要根据当前环境来决 定其行为的软件系统来说,是一种非常实用的设计模式。 • 增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭 原则”。
模式实例与解析
实例一: 实例一:电器工厂
抽象工厂模式
模式实例与解析
实例一: 实例一:电器工厂
• 参考代码 (Chapter 06 Abstract Factory\sample01)
演示…… 演示
抽象工厂模式
模式实例与解析
实例二: 实例二:数据库操作工厂
• 某系统为了改进数据库操作的性能,自定义数据库连接对象 Connection和语句对象Statement,可针对不同类型的数据库提 供不同的连接对象和语句对象,如提供Oracle或SQL Server专用 连接类和语句类,而且用户可以通过配置文件等方式根据实际 需要动态更换系统数据库。使用抽象工厂模式设计该系统。
抽象工厂模式
模式优缺点
抽象工厂模式的缺点
• 在添加新的产品对象时,难以扩展抽象工厂来生产新种类的产 品,这是因为在抽象工厂角色中规定了所有可能被创建的产品 集合,要支持新种类的产品就意味着要对该接口进行扩展,而 这将涉及到对抽象工厂角色及其所有子类的修改,显然会带来 较大的不便。 • 开闭原则的倾斜性(增加新的工厂和产品族容易,增加新的产 品等级结构麻烦)
抽象工厂模式
模式动机
产品族与产品等级结构示意图
抽象工厂模式
模式动机
当系统所提供的工厂所需生产的具体产品并不是一个简单的对象, 当系统所提供的工厂所需生产的具体产品并不是一个简单的对象, 多个位于不同产品等级结构中属于不同类型的具体产品时需要 而是多个位于不同产品等级结构中属于不同类型的具体产品时 而是多个位于不同产品等级结构中属于不同类型的具体产品时需要 使用抽象工厂模式。 使用抽象工厂模式。 抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一 抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一 种形态。 种形态。 抽象工厂模式与工厂方法模式最大的区别在于, 抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对 的是一个产品等级结构, 的是一个产品等级结构,而抽象工厂模式则需要面对多个产品等级 结构, 结构,一个工厂等级结构可以负责多个不同产品等级结构中的产品 对象的创建 。当一个工厂等级结构可以创建出分属于不同产品等 级结构的一个产品族中的所有对象时, 级结构的一个产品族中的所有对象时,抽象工厂模式比工厂方法模 式更为简单、有效率。 式更为简单、有效率。
抽象工厂模式
模式动机
为了更清晰地理解工厂方法模式,需要先引入两个概念: 为了更清晰地理解工厂方法模式,需要先引入两个概念: • 产品等级结构:产品等级结构即产品的继承结构,如一个抽象 类是电视机,其子类有海尔电视机、海信电视机、TCL电视机, 则抽象电视机与具体品牌的电视机之间构成了一个产品等级结 构,抽象电视机是父类,而具体品牌的电视机是其子类。 • 产品族:在抽象工厂模式中,产品族是指由同一个工厂生产的, 位于不同产品等级结构中的一组产品,如海尔电器工厂生产的 海尔电视机、海尔电冰箱,海尔电视机位于电视机产品等级结 构中,海尔电冰箱位于电冰箱产品等级结构中。
本章小结
抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无 须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型 模式。 抽象工厂模式包含四个角色:抽象工厂用于声明生成抽象产品的方法; 具体工厂实现了抽象工厂声明的生成抽象产品的方法,生成一组具体 产品,这些产品构成了一个产品族,每一个产品都位于某个产品等级 结构中;抽象产品为每种产品声明接口,在抽象产品中定义了产品的 抽象业务方法;具体产品定义具体工厂生产的具体产品对象,实现抽 象产品接口中定义的业务方法。 抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种 形态。抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式 针对的是一个产品等级结构,而抽象工厂模式则需要面对多个产品等 级结构。
模式分析
Button Text
UnixButton
LinuxButton
WindowsButton
UnixText
LinuxText
WindowsText
抽象工厂模式
模式分析
抽象工厂模式
模式分析
抽象工厂模式
模式分析
抽象工厂类的典型代码如下: 抽象工厂类的典型代码如下:
public abstract class AbstractFactory { public abstract AbstractProductA createProductA(); public abstract AbstractProductB createProductB(); }
抽象工厂模式
模式扩展
工厂模式的退化
• 当抽象工厂模式中每一个具体工厂类只创建一个产品对象,也就是 只存在一个产品等级结构时,抽象工厂模式退化成工厂方法模式; 当工厂方法模式中抽象工厂与具体工厂合并,提供一个统一的工厂 来创建产品对象,并将创建对象的工厂方法设计为静态方法时,工 厂方法模式退化成简单工厂模式。
抽象工厂模式
模式实例与解析
实例一: 实例一:电器工厂
• 一个电器工厂可以产生多种类型的电器,如海尔工厂可以生产 海尔电视机、海尔空调等,TCL工厂可以生产TCL电视机、TCL 空调等,相同品牌的电器构成一个产品族,而相同类型的电器 构成了一个产品等级结构,现使用抽象工厂模式模拟该场景。
抽象工厂模式
抽象工厂模式
模式应用
(1) Java SE AWT(抽象窗口工具包) (抽象窗口工具包)
• 在Java语言的AWT(抽象窗口工具包)中就使用了抽象工厂模 式,它使用抽象工厂模式来实现在不同的操作系统中应用程序 呈现与所在操作系统一致的外观界面。
抽象工厂模式
模式应用
(2) 在很多软件系统中需要更换界面主题,要求界面中 在很多软件系统中需要更换界面主题, 的按钮、文本框、背景色等一起发生改变时, 的按钮、文本框、背景色等一起发生改变时,可以使用 抽象工厂模式进行设计。 抽象工厂模式进行设计。
本章小结
抽象工厂模式的主要优点是隔离了具体类的生成,使得客户并不需要 知道什么被创建,而且每次可以通过具体工厂类创建一个产品族中的 多个对象,增加或者替换产品族比较方便,增加新的具体工厂和产品 族很方便;主要缺点在于增加新的产品等级结构很复杂,需要修改抽 象工厂和所有的具体工厂类,对“开闭原则”的支持呈现倾斜性。 抽象工厂模式适用情况包括:一个系统不应当依赖于产品类实例如何 被创建、组合和表达的细节;系统中有多于一个的产品族,而每次只 使用其中某一产品族;属于同一个产品族的产品将在一起使用;系统 提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端 不依赖于具体实现。
相关文档
最新文档