2.答:工厂方法模式的主要优点有:1)用户只需要知道具体工厂的名称就可得到所要
的产品,无须知道产品的具体创建过程;2)在系统增加新的产品时只需要添加具体产品类
和对应的具体工厂类,无需对原工厂进行任何修改,满足开闭原则。
其缺点是:每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加
了系统的复杂度。
3.答:工厂方法模式中考虑的是一类产品的生厂,如:电视机工厂;而抽象工厂模式考
虑多类产品的生产,如:电器工厂。
工厂方法模式通常适用以下场景:1)客户只知道创建产品的工厂名,而不知道具体的产
品名。如:TCL 电视工厂、海信电视工厂等;2)创建对象的任务由多个具体子工厂中的某
一个完成,而抽象工厂只提供创建产品的接口。3)客户不关心创建产品的细节,只关心产
品的品牌。
抽象工厂模式通常适用以下场景: 1)当需要创建的对象是一系列相互关联或相互依赖
的产品族时,如:电器工厂中的电视机、洗衣机、空调等;2)系统中有多个产品族,但每
次只使用其中的某一族产品。如:有的粉丝只喜欢穿李宁牌的衣、裤和鞋;3)系统中提供
了产品的类库,且所有产品的接口相同,客户端不依赖产品实例的创建细节和内部结构。
4.答:产品的种类称为产品等级,而一个具体工厂所生产的位于不同等级的一组产品称
为一个产品族。
5.答:建造者模式的定义: 指将一个复杂对象的构造与它的表示分离,使同样的构建过
程可以创建不同的表示,这样的设计模式被称为建造者模式。
该模式的主要优点是: 1)各个具体的建造者相互独立的,有利于系统的扩展;2)客
户端不必知道产品内部组成的细节,便于控制细节风险。
其缺点是:1)产品的组成部分必须相同,这限制了其使用范围;2)如果产品的内部变
化复杂,该模式会增加很多的建造者类。
建造者模式通常在以下场合使用: 1)创建的对象较复杂,由多个部件构成,各部件面
临着复杂的变化,但构件间的建造顺序是稳定的;2)创建复杂对象的算法独立于该对象的
组成部分以及它们的装配方式,即产品的构建过程和最终的表示是独立的。
六、编程题
说明:1-5 编程题可参考本章节的实例自己实现。
第 4 章 结构型模式(上)
4.2 代理模式
4.3 适配器模式
4.4 桥接模式
一、单选择题
1. ( A ) 2.( A ) 3. ( D ) 4. ( B ) 5. ( A )
6. ( C ) 7. ( D )
二、多选择题
1.( A、D ) 2. ( A、B、D ) 3.( A、C、D ) 4. ( A、B、C )