习题答案在暗黑破坏神III游戏中,有很多个角色可以供用户选择野蛮人、魔法师、武僧。。。要求使用工厂方法,提供给用户角色实例画类图、写父子类代码、写main方法大纲产品等级结构与产品族抽象工厂模式概述抽象工厂模式的结构与实现抽象工厂模式的应用实例开闭原则的倾斜性抽象工厂模式的优缺点与适用环境产品等级结构与产品族工厂方法模式每个具体工厂只有一个或者一组重载的工厂方法,只能生产一种产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销抽象工厂模式一个工厂可以生产一系列产品(一族产品),极大减少了工厂类的数量产品等级结构与产品族概念产品等级结构:产品等级结构即产品的继承结构产品族:产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品产品族产品等级结构一个产品族一个产品等级结构五个产品族,分属于三个不同的产品等级结构抽象工厂模式概述模式动机当系统所提供的工厂生产的具体产品并不是一个简单的对象,而是多个位于不同产品等级结构、属于不同类型的具体产品时就可以使用抽象工厂模式抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种形式抽象工厂模式概述抽象工厂模式的定义对象创建型模式抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。AbstractFactoryPattern:Provideaninterfaceforcreatingfamiliesofrelatedordependentobjectswithoutspecifyingtheirconcreteclasses.抽象工厂模式概述抽象工厂模式的定义又称为工具(Kit)模式抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品当一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象时,抽象工厂模式比工厂方法模式更为简单、更有效率抽象工厂模式的结构与实现抽象工厂模式的结构ConcreteProductA1AbstractProductAConcreteFactory1++CreateProductA()CreateProductB()...:AbstractProductA:AbstractProductBAbstractFactory++CreateProductA()CreateProductB()...:AbstractProductA:AbstractProductBClientConcreteFactory2++CreateProductA()CreateProductB()...:AbstractProductA:AbstractProductBConcreteProductA2ConcreteProductB1AbstractProductBConcreteProductB2抽象工厂模式的结构与实现抽象工厂模式的结构抽象工厂模式包含以下4个角色:•AbstractFactory(抽象工厂)•ConcreteFactory(具体工厂)•AbstractProduct(抽象产品)•ConcreteProduct(具体产品)抽象工厂模式的结构与实现抽象工厂模式的实现典型的抽象工厂类代码:abstractclassAbstractFactory{publicabstractAbstractProductACreateProductA();//工厂方法一publicabstractAbstractProductBCreateProductB();//工厂方法二……}抽象工厂模式的结构与实现抽象工厂模式的实现典型的具体工厂类代码:classConcreteFactory1:AbstractFactory{//工厂方法一publicoverrideAbstractProductACreateProductA(){returnnewConcreteProductA1();}//工厂方法二publicoverrideAbstractProductBCreateProductB(){returnnewConcreteProductB1();}……}抽象工厂暴力摩托(带武器Weapon)游戏的两种模式:普通模式:开摩托、手拿AK47魔法模式:骑扫把、手拿魔法棒开闭原则的倾斜性增加产品族对于增加新的产品族,抽象工厂模式很好地支持了开闭原则,只需要增加具体产品并对应增加一个新的具体工厂,对已有代码无须做任何修改增加新的产品等级结构对于增加新的产品等级结构,需要修改所有的工厂角色,包括抽象工厂类,在所有的工厂类中都需要增加生产新产品的方法,违背了开闭原则抽象工厂模式的优缺点与适用环境模式优点隔离了具体类的生成,使得客户端并不需要知道什么被创建当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象增加新的产品族很方便,无须修改已有系统,符合开闭原则抽象工厂模式的优缺点与适用环境模式缺点增加新的产品等级结构麻烦,需要对原有系统进行较大的修改,甚至需要修改抽象层代码,这显然会带来较大的不便,违背了开闭原则抽象工厂模式的优缺点与适用环境模式适用环境一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节系统中有多于一个的产品族,但每次只使用其中某一产品族属于同一个产品族的产品将在一起使用,这一约束必须在系统的设计中体现出来产品等级结构稳定,设计完成之后,不会向系统中增加新的产品等级结构或者删除已有的产品等级结构例子穿衣风格高富帅衣服三叶草食物哈根达斯屌丝衣服班尼路食物食堂画类图写Main入口