《05 C#设计模式-抽象工厂模式.ppt》由会员分享,可在线阅读,更多相关《05 C#设计模式-抽象工厂模式.ppt(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、www.ChinaSA.infoDDesign esign P Patternsatterns抽象工厂模式抽象工厂模式抽象工厂模式抽象工厂模式刘刘 伟伟(Sunny)weiliu_www.ChinaSA.info大纲w产品等级结构与产品族w抽象工厂模式概述w抽象工厂模式的结构与实现w抽象工厂模式的应用实例w开闭原则的倾斜性w抽象工厂模式的优缺点与适用环境www.ChinaSA.info产品等级结构与产品族w工厂方法模式每个具体工厂每个具体工厂只有一个或者一组重载的工厂方法只有一个或者一组重载的工厂方法,只只能生产一种产品能生产一种产品,可能会导致系统中存在大量的工厂,可能会导致系统中存在大量的
2、工厂类,势必会增加系统的开销类,势必会增加系统的开销w抽象工厂模式一个工厂一个工厂可以生产一系列产品(一族产品)可以生产一系列产品(一族产品),极大减,极大减少了工厂类的数量少了工厂类的数量www.ChinaSA.info产品等级结构与产品族w概念产品等级结构:产品等级结构:产品等级结构即产品的产品等级结构即产品的继承结构继承结构产品族:产品族:产品族是指由产品族是指由同一个工厂生产的,位于不同同一个工厂生产的,位于不同产品等级结构中的一组产品产品等级结构中的一组产品五个产品族,分属于五个产品族,分属于三个不同的产品等级三个不同的产品等级结构结构www.ChinaSA.info抽象工厂模式概述
3、w模式动机当系统所提供的工厂生产的具体产品并不是一个简单的对象,而当系统所提供的工厂生产的具体产品并不是一个简单的对象,而是是多个位于不同产品等级结构、属于不同类型的具体产品时就可多个位于不同产品等级结构、属于不同类型的具体产品时就可以使用抽象工厂模式以使用抽象工厂模式抽象工厂模式是抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的所有形式的工厂模式中最为抽象和最具一般性的一种形式一种形式www.ChinaSA.info抽象工厂模式概述w抽象工厂模式的定义对象创建型对象创建型模式模式抽抽象象工工厂厂模模式式:提供一个创创建建一一系系列列相相关关或或相相互互依依赖赖对对象象的接口的接口,而
4、无须指定它们具体的类。Abstract Factory Pattern:Provide an interface for creating families of related or dependent objects without specifying their concrete classes.www.ChinaSA.info抽象工厂模式概述w抽象工厂模式的定义又称为又称为工具工具(Kit)模式模式抽象工厂模式中的具体工厂不只是创建一种产品,它抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品负责创建一族产品当当一个工厂等级结构可以创建出分属于不同产品等级一个工厂等级结构
5、可以创建出分属于不同产品等级结构的一个产品族中的所有对象时结构的一个产品族中的所有对象时,抽象工厂模式比抽象工厂模式比工厂方法模式更为简单、更有效率工厂方法模式更为简单、更有效率www.ChinaSA.info抽象工厂模式的结构与实现w抽象工厂模式的结构www.ChinaSA.info抽象工厂模式的结构与实现w抽象工厂模式的结构抽象工厂模式包含以下抽象工厂模式包含以下4个角色:个角色:AbstractFactory(抽象工厂)ConcreteFactory(具体工厂)AbstractProduct(抽象产品)ConcreteProduct(具体产品)www.ChinaSA.info抽象工厂模式
6、的结构与实现w抽象工厂模式的实现典型的抽象工厂类代码:典型的抽象工厂类代码:abstract class AbstractFactorypublic abstract AbstractProductA CreateProductA();/工厂方法一工厂方法一public abstract AbstractProductB CreateProductB();/工厂方法二工厂方法二www.ChinaSA.info抽象工厂模式的结构与实现w抽象工厂模式的实现典型的具体工厂类代码:典型的具体工厂类代码:class ConcreteFactory1:AbstractFactory /工厂方法一工厂方法一
7、public override AbstractProductA CreateProductA()return new ConcreteProductA1();/工厂方法二工厂方法二public override AbstractProductB CreateProductB()return new ConcreteProductB1();www.ChinaSA.info抽象工厂模式的应用实例w实例说明某软件公司要开发一套界面皮肤库,可以对基于.NET平台的桌面软件进行界面美化。用户在使用时可以通过菜单来选择皮肤,不同的皮肤将提供视觉效果不同的按钮、文本框、组合框等界面元素,例如春天(Spri
8、ng)风格的皮肤将提供浅绿色的按钮、绿色边框的文本框和绿色边框的组合框,而夏天(Summer)风格的皮肤则提供浅蓝色的按钮、蓝色边框的文本框和蓝色边框的组合框,其结构示意图如下图所示:该皮肤库需要具备良好的灵活性和可扩展性,用户可以自由选择不同的皮肤,开发人员可以在不修改既有代码的基础上增加新的皮肤。现使用抽象工厂模式来设计该界面皮肤库。界面皮肤界面皮肤库结库结构示意构示意图图www.ChinaSA.info抽象工厂模式的应用实例w实例类图界面皮肤库结构图界面皮肤库结构图www.ChinaSA.info抽象工厂模式的应用实例w实例代码(1)Button:按钮接口,充当抽象产品:按钮接口,充当抽
9、象产品(2)SpringButton:Spring按钮类,充当具体产品按钮类,充当具体产品(3)SummerButton:Summer按钮类,充当具体产品按钮类,充当具体产品(4)TextField:文本框接口,充当抽象产品:文本框接口,充当抽象产品(5)SpringTextField:Spring文本框类,充当具体产品文本框类,充当具体产品(6)SummerTextField:Summer文本框类,充当具体产品文本框类,充当具体产品(7)ComboBox:组合框接口,充当抽象产品:组合框接口,充当抽象产品(8)SpringComboBox:Spring组合框类,充当具体产品组合框类,充当具体
10、产品(9)SummerComboBox:Summer组合框类,充当具体产品组合框类,充当具体产品(10)SkinFactory:界面皮肤工厂接口,充当抽象工厂:界面皮肤工厂接口,充当抽象工厂(11)SpringSkinFactory:Spring皮肤工厂,充当具体工厂皮肤工厂,充当具体工厂(12)SummerSkinFactory:Summer皮肤工厂,充当具体工厂皮肤工厂,充当具体工厂(13)配置文件配置文件App.config(14)Program:客户端测试类:客户端测试类演示演示演示演示参考代码参考代码(DesignPatternAbstractFactorySample)www.Ch
11、inaSA.info抽象工厂模式的应用实例w结果及分析更换皮肤,只需修改配置文件更换皮肤,只需修改配置文件 www.ChinaSA.info开闭原则的倾斜性w增加产品族对于增加新的产品族对于增加新的产品族,抽象工厂模式很好地,抽象工厂模式很好地支持支持了了开开闭原则闭原则,只需要增加具体产品并对应增加一个新的具,只需要增加具体产品并对应增加一个新的具体工厂,对已有代码无须做任何修改体工厂,对已有代码无须做任何修改w增加新的产品等级结构对于增加新的产品等级结构对于增加新的产品等级结构,需要修改所有的工厂角,需要修改所有的工厂角色,包括抽象工厂类,在所有的工厂类中都需要增加色,包括抽象工厂类,在所
12、有的工厂类中都需要增加生产新产品的方法,生产新产品的方法,违背了开闭原则违背了开闭原则www.ChinaSA.info抽象工厂模式的优缺点与适用环境w模式优点隔离了具体类的生成隔离了具体类的生成,使得客户端并,使得客户端并不需要知道什么被创建不需要知道什么被创建当一个产品族中的多个对象被设计成当一个产品族中的多个对象被设计成一起工作时,它一起工作时,它能够保证客户端始终能够保证客户端始终只使用同一个产品族中的对象只使用同一个产品族中的对象增加新的产品族很方便增加新的产品族很方便,无须修改已,无须修改已有系统,有系统,符合开闭原则符合开闭原则www.ChinaSA.info抽象工厂模式的优缺点与
13、适用环境w模式缺点增加新的产品等级结构麻烦增加新的产品等级结构麻烦,需要对原,需要对原有系统进行较大的修改,甚至需要修改有系统进行较大的修改,甚至需要修改抽象层代码,这显然会带来较大的不便,抽象层代码,这显然会带来较大的不便,违背了开闭原则违背了开闭原则www.ChinaSA.info抽象工厂模式的优缺点与适用环境w模式适用环境一个系统一个系统不应当依赖于产品类实例如何被创不应当依赖于产品类实例如何被创建、组合和表达的细节建、组合和表达的细节系统中有多于一个的产品族,但系统中有多于一个的产品族,但每次只使用每次只使用其中某一产品族其中某一产品族属于同一个产品族的产品将在一起使用属于同一个产品族的产品将在一起使用,这,这一约束必须在系统的设计中体现出来一约束必须在系统的设计中体现出来产品等级结构稳定产品等级结构稳定,设计完成之后,不会向,设计完成之后,不会向系统中增加新的产品等级结构或者删除已有系统中增加新的产品等级结构或者删除已有的产品等级结构的产品等级结构www.ChinaSA.infoENDEND