抽象工厂(三) wfac了 Cllent CraenSomitar Ca4iw棉实w PMWIndow Mouilndow Notirwidgefactory PMWidptFactory CrearnSeri Bar) CresteSemlBar() CreafuMndom(1 Gs时wMdk-0 中卡带卡卡卡带带来米带卡带卡带带带带带家数非非亲重能重表康非形金年年年卡 Object Oriented Analysis and Design 11
Object Oriented Analysis and Design 11 抽象工厂(三)
抽象工厂(四) 每一种视感标准都对应于一个具体的WidgetFactory-子类。每一子类实 现那些用于创建合适视感风格的窗口组件的操作。例如, MotifWidgetFactoryl的Create ScrollBar操作实例化并返▣一个Motif 滚动条,而相应的PMWidgetFactory操作返▣一个Presentation 时蓬口芝义笋女停船 象类定义的接口交互,而不使用特定的具体类的接口。 ◆ WidgetFactory也增强了具体窗口组件类之间依赖关系。一个Motif的滚 动条应该与Motif按钮、Motif正文编辑器一起使角,这一约束条件作为 使用MotifWidget Factory的结果被自动加上。 Object Oriented Analysis and Design 12
Object Oriented Analysis and Design 12 抽象工厂(四) w 每一种视感标准都对应于一个具体的WidgetFactory子类。每一子类实 现那些用于创建合适视感风格的窗口组件的操作。例如, MotifWidgetFactory的Create ScrollBar操作实例化并返回一个Motif 滚动条,而相应的PMWidgetFactory操作返回一个Presentation Manager的滚动条。客户仅通过WidgetFactory接口创建窗口组件,他们 并不知道哪些类实现了特定视感风格的窗口组件。换言之,客户仅与抽 象类定义的接口交互,而不使用特定的具体类的接口。 w WidgetFactory也增强了具体窗口组件类之间依赖关系。一个Motif的滚 动条应该与Motif按钮、Motif正文编辑器一起使用,这一约束条件作为 使用MotifWidget Factory的结果被自动加上
抽象工厂(五) ◆结构: AbstractFactory Client CreateProductA0 CreateProductB0 AbstractProductA ConcreteFactoryl 1 ConcreteFactory2 ProductA2 ProductAl CreateProductAO CreateProductAO CreateProductBO CreateProductBO AbstractProductB ProductB2 ProductBl ◆参与者: ■ Client、AbstractFactory、ConcreteFactory、 AbstractProduct ConcreteProduct ◆协作: Object Oriented Analysis and Design 13
Object Oriented Analysis and Design 13 抽象工厂(五) w 结构: w 参与者: § Client、AbstractFactory、ConcreteFactory、 AbstractProduct、ConcreteProduct w 协作:
抽象工厂(六) ◆评估 "与factory method的关系 ·多个factory method合在一起 ·factory method一定是virtuall的 AbstractFactory Client CreateProductA() CreateProductE() AbstractProductA ProductA2 ProductA1 ConcreteFactory1 ConcreteFactory2 CreateProductAl) CreateProductA( CreateProductB() CreateProducB() AbstractProductB ProductB2 ProductB1 Object Oriented Analysis and Design 14
Object Oriented Analysis and Design 14 抽象工厂(六) w 评估 § 与factory method的关系 • 多个factory method合在一起 • factory method一定是virtual的
抽象工厂(七) 评估 ◆ ■优点: ·factory把product的类型封装起来,分离了具体 的类 ·易于变换product)族 ·保证不同族之间的product相互不会碰撞,即保 证products的一致性 缺点: ·factory对象的方法数目对应product数目,增加 新的product种类比较困难,要影响到factory的 基类,进而影响到所有的子类 Object Oriented Analysis and Design 15
Object Oriented Analysis and Design 15 抽象工厂(七) w 评估 § 优点: • factory把product的类型封装起来,分离了具体 的类 • 易于变换product族 • 保证不同族之间的product相互不会碰撞,即保 证products的一致性 § 缺点: • factory对象的方法数目对应product数目,增加 新的product种类比较困难,要影响到factory的 基类,进而影响到所有的子类