- 浏览: 391351 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
yanmie:
您的文章已被我们收录地址:http://www.airmyth ...
学习一下 Pixel Bender -
chaimzane:
我现在自己都有点看不懂了 实际上很简单, LocaleModu ...
Flex 优化技巧 -- 全局CSS样式模块实现RSLS 方式加载 -
muqingren:
以我现在对flex的了解,没看懂你说的........... ...
Flex 优化技巧 -- 全局CSS样式模块实现RSLS 方式加载 -
cony138:
卤煮碉堡了啊
A*寻路 -- 更加真实 的路径(一) -
jack_ye:
[/flash][/flash][/fl[u][u]ash][ ...
Alternativa3D 8 基础理论 / 概念
AbstractFactory 抽象工厂模式。《设计模式》里面是这样定义的:提供一个创建一系列相关或相互以来对象的接口,而无需指定他们具体的类。
AbstractFactory模式,是一种创建模式,在创建若干个系列的产品时,(但是每一系列构成已经确定不变)时变得容易,它分离了具体的类,有利于产品的一致性。但是若果一个系列的产品若果需要增加,恐怕AbstractFactory模式就难以胜任了,因为改动很多的类。一个应用中一般每一产品系列只需要一个工厂,所以,一个工厂最好用 Singleton来实现。
下面来看一个AS3的例子:
要求显示某种风格的房间,房间里有家具和墙(已经确定),和若干中风格的,现在仅仅支持 中国风格和意大利风格的。
Furniture.as package { public class Furniture { public function Furniture() extends Sprite{ } public function showFurnitureInfo():void { throw new Error("Furniture"); } } }
ChineseStyleFurniture .as package { public class ChineseStyleFurniture extends Furniture { public function ChineseStyleFurniture() { } override public function showFurnitureInfo():void { trace("I'm ChineseStyleFurniture"); } } }
ItalianStyleFurniture .as package { public class ItalianStyleFurniture extends Furniture { public function ItalianStyleFurniture() { } override public function showFurnitureInfo():void { trace("I'm ItalianStyleFurniture"); } } }
Wall.as package { public class Wall { public function Wall() { } public function showWallInfo():void { throw new Error("Wall"); } } }
ChineseStyleWall.as package { public class ChineseStyleWall extends Wall { public function ChineseStyleWall() { } override public function showWallInfo():void { trace("I'm ChineseStyleWall"); } } }
package { public class ItalianStyleWall extends Wall { public function ItalianStyleWall() { } override public function showWallInfo():void { trace("I'm ItalianStyleWall"); } } }
好了,现在家具和墙的类写完了,若果要增加风格只要在继承Furniture和Wall写相关的风格的具体子类就可以了。下面来写生产具体子类的工厂类。
RoomElementFactory.as package { public class RoomElementFactory { public function RoomElementFactory() { } public function createFurniture():Furniture { return null; } public function createWall():Wall { return null; } } }
ChineseStyleRoomElementFactory.as package { public class ChineseStyleRoomElementFactory extends RoomElementFactory { private static var instance:ChineseStyleRoomElementFactory; public function ChineseStyleRoomElementFactory() { } public static function getInstance():ChineseStyleRoomElementFactory { if(!instance) { instance = new ChineseStyleRoomElementFactory(); } return instance; } override public function createFurniture():Furniture { return new ChineseStyleFurniture(); } override public function createWall():Wall { return new ChineseStyleWall(); } } }
ItalianStyleRoomElementFactory .as package { public class ItalianStyleRoomElementFactory extends RoomElementFactory { private static var instance:ItalianStyleRoomElementFactory; public function ItalianStyleRoomElementFactory() { } public static function getInstance():ItalianStyleRoomElementFactory { if(!instance) { instance = new ItalianStyleRoomElementFactory(); } return instance; } override public function createFurniture():Furniture { return new ItalianStyleFurniture(); } override public function createWall():Wall { return new ItalianStyleWall(); } } }
Room类这时,只要操作RoomElementFactory和Furniture和Wall就可以了。
Room .as package { public class Room { public static const CHINESE_STYLE_ROOM:String = "chineseStyleRoom"; public static const ITALIAN_STYLE_ROOM:String = "italianStyleRoom"; public function Room(style:String) { createRoomElementByStyle(style); } private var furniture:Furniture; private var wall:Wall; private function createRoomElementByStyle(style:String):void { if(style == CHINESE_STYLE_ROOM) { furniture = ChineseStyleRoomElementFactory.getInstance().createFurniture(); wall = ChineseStyleRoomElementFactory.getInstance().createWall(); } else { furniture = ItalianStyleRoomElementFactory.getInstance().createFurniture(); wall = ItalianStyleRoomElementFactory.getInstance().createWall(); } } public function showElementInfo():void { if(furniture) { furniture.showFurnitureInfo(); } if(wall) { wall.showWallInfo(); } } } }
评论
1 楼
ibio
2009-05-06
引用
好了,现在家具和墙的类写完了,若果要增加风格只要在继承Furniture和Wall写相关的风格的具体子类就可以了。下面来写生产具体子类的工厂类。
增加了相关的风格不是一样也要修改 Room 类里面的这个吗?
private function createRoomElementByStyle(style:String):void { if(style == CHINESE_STYLE_ROOM) { furniture = ChineseStyleRoomElementFactory.getInstance().createFurniture(); wall = ChineseStyleRoomElementFactory.getInstance().createWall(); } else { furniture = ItalianStyleRoomElementFactory.getInstance().createFurniture(); wall = ItalianStyleRoomElementFactory.getInstance().createWall(); } }
发表评论
-
Visitor 访问者 行为模式
2009-02-25 00:55 1097Visitor 访问者 行为模式,表示一个作用于某个对象结构中 ... -
Template Method 模板方法 行为模式
2009-02-25 00:54 920Template Method 模板方法 行为模式,定义一个操 ... -
Strategy 策略 行为模式
2009-02-25 00:52 884Strategy 策略 行为模式,定义一系列的算法,把他们一个 ... -
State 状态 行为模式
2009-02-25 00:50 1122State 状态 行为模式,允许一个对象在其内部状态改变时改变 ... -
Observer 观察者 行为模式
2009-02-25 00:48 1641Observer 观察者 行为模式,定义对象的一对多的依赖关系 ... -
Memento 备忘录 行为模式
2009-02-25 00:46 1207Memento 备忘录 行为模式 ... -
Mediator 中介 行为模式
2009-02-25 00:44 1536Mediator 中介 行为 ... -
Iterator 迭代器 行为模式
2009-02-25 00:41 1896Iterator 迭代器 行为模式,提供一种顺序访问一个聚合对 ... -
Interpreter 解释器 行为模式
2009-02-25 00:40 900Interpreter 解释器 行为模式,给定一个语言,定义它 ... -
Command 命令 行为模式
2009-02-25 00:35 1367Command 命令 行为模式,将一个请求封装为一个对象 ... -
Chain of Responsibility 职责链 行为模式
2009-02-25 00:02 950Chain of Responsibility 职责链 行为模 ... -
Proxy 代理
2009-02-24 23:46 2032Proxy 代理,为其他对象提供一个代理以控制这个对象。 ... -
Flyweight (享元)
2009-02-24 17:56 1220Flyweight (享元)模式,是结构型模式,它是运用 ... -
Facade 外观
2009-02-24 15:00 1651Facade 外观,结构型模式,为子系统中的一组接口提供一个一 ... -
Composite 组合
2009-02-23 23:45 881Composite 组合模式,将对象组合成树形结构以表示“部分 ... -
Decorator 装饰模式
2009-02-23 23:42 1285Decorator 装饰模式,对象 ... -
Bridge 桥接
2009-02-23 23:11 1133Bridge 桥接,对象结构型模式,将抽象部分与实 ... -
Adapter 适配器
2009-02-23 18:44 1107Adapter 适配器,类对象结构型模式,将一个类的接口转化为 ... -
Prototype 原型 Singleton单件
2009-02-23 14:43 1220Prototype 原型,创建型模式,用原型实例指定创建对象的 ... -
Factory Method 工厂方法
2009-02-23 14:09 1136Factory Method 工厂方法,创建型 模式,她定义一 ...
相关推荐
**抽象工厂模式(Abstract Factory Pattern)是创建型设计模式之一,它提供了一种创建对象的接口,使得子类可以决定实例化哪一个类。这种类型的设计模式属于类的创建模式。** 在C#中,抽象工厂模式的核心在于抽象...
1. **抽象工厂接口(Abstract Factory)**:定义一个创建对象的接口,但不指定具体的实现。在C#中,这通常表现为一个接口,如`IAbstractFactory`。 2. **具体工厂类(Concrete Factory)**:实现了抽象工厂接口,...
1. **抽象工厂(Abstract Factory)**:定义一个创建对象的接口,但不指定具体的实现。在C#中,这通常表现为一个接口,如`IAbstractFactory`。 2. **具体工厂(Concrete Factory)**:实现了抽象工厂接口,负责创建...
Abstract_Factory抽象工厂Abstract_Factory抽象工厂Abstract_Factory抽象工厂Abstract_Factory抽象工厂
抽象工厂模式(Abstract Factory)是一种创建型设计模式,用于提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。这种模式的关键在于,它允许客户端代码与具体的实现细节解耦,使得添加新的产品...
抽象工厂(Abstract Factory)模式是一种创建型设计模式,它提供了一种创建对象的接口,但允许子类决定实例化哪一个类。这种模式是基于对象的抽象,而不是具体的类,因此,它允许创建一系列相关的对象,而无需指定...
1. **模式结构**:抽象工厂模式通常包括抽象工厂接口(AbstractFactory),具体工厂类(ConcreteFactory),抽象产品接口(Product)以及具体产品类(ConcreteProduct)。抽象工厂定义了创建产品的方法,而具体工厂...
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建对象集合的接口,而无需指定具体的产品类型。这种模式适用于当系统需要在不同平台或环境中创建一组相关或相互依赖的对象时,而这些...
1. 抽象工厂(Abstract Factory):这是模式的核心,它是一个接口或抽象类,定义了一系列创建对象的方法,但并不直接实例化具体的对象。这些方法用于创建一系列相关或相互依赖的对象。 2. 具体工厂(Concrete ...
这个压缩包“C# 抽象工厂 AbstractFactory.rar”可能包含了一个关于如何在C#中实现抽象工厂模式的实例或教程。 抽象工厂模式是一种创建型设计模式,它提供了一种创建对象族的方式,而无需指定具体类。在C#中,这种...
在“AbstractFactory.rar”这个压缩包中,我们可以预想包含了一个简单的示例,用来演示抽象工厂模式的基本概念和应用。 抽象工厂模式的核心在于“工厂”,在软件工程中,工厂是负责创建对象的类或接口。在这个具体...
在这个例子中,`AbstractProductA`和`AbstractProductB`是抽象产品,`ConcreteProductA1/A2`和`ConcreteProductB1/B2`是具体产品,`AbstractFactory`是抽象工厂,`ConcreteFactory1/2`是具体工厂。客户端代码通过...
1. **抽象工厂接口(Abstract Factory)**:定义了一系列产品的创建方法,例如`NWFactory`可能是这个抽象工厂的实现,它包含了创建人和动物的方法。 2. **具体工厂类(Concrete Factory)**:实现了抽象工厂接口,...
1. 抽象工厂(Abstract Factory):这是模式的核心,定义了一组创建对象的接口,客户端通过这个接口请求创建所需的产品。这个接口不直接创建产品,而是将产品创建的职责委托给具体工厂。 2. 具体工厂(Concrete ...
### 抽象工厂模式(Abstract Factory Pattern) #### 引入 在探讨抽象工厂模式之前,我们先回顾一下之前介绍过的简单工厂模式与工厂方法模式。这两种模式主要关注于解决对象创建过程中“new”操作的问题,使得创建...
抽象工厂(Abstract Factory)设计模式是软件工程中一种重要的创建型设计模式,它提供了一种创建对象组的方式,这些对象属于同一族系并且彼此相关。这个模式的主要目标是定义一个接口,用于创建一族相关或相互依赖的...
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种在不指定具体类的情况下创建一系列相关或相互依赖对象的接口。这个模式使得客户端代码与具体产品的实现解耦,从而提高了系统的灵活性和...
在软件设计模式中,工厂方法(Factory Method)和抽象工厂(Abstract Factory)是两种非常重要的创建型模式。它们主要用于解决对象实例化的问题,提供了一种封装对象创建过程的方法,使得代码更加灵活,易于扩展和...