抽象工厂设计模式

抽象工厂设计模式

ID:5662626

大小:180.00 KB

页数:5页

时间:2017-12-21

抽象工厂设计模式_第1页
抽象工厂设计模式_第2页
抽象工厂设计模式_第3页
抽象工厂设计模式_第4页
抽象工厂设计模式_第5页
资源描述:

《抽象工厂设计模式》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、抽象工厂(AbstractFactory)设计模式目的:提供一个创建一系列相关或相互依赖对象的接口,无需指定它们具体的类。别名:Kit“抽象”来自“抽象产品角色”,而“抽象工厂”就是“抽象产品角色的工厂”。在简单工厂中,我们的工厂类一次只可以处理一类产品。那么如果我们想处理多类产品,简单工厂是满足不了的,必须要用抽象工厂设计模式。抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定具体产品类型的情况下,创建多个产品族中的对象。当每个抽象产

2、品都有多于一个的具体子类的时候,工厂角色怎么知道实例化哪一个子类呢?比如每个抽象产品角色都有两个具体产品。抽象工厂模式提供两个具体工厂角色,分别对应于这两个具体产品角色,每一个具体工厂角色只负责某一个产品角色的实例化。每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例。每一个模式都是针对一定问题的解决方案,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式针对的是多个产品等级结构。成分:从上图可以看出,抽象工厂模式涉及到以下几类角色:1.抽象工厂(AbstractFactory)角色:声明一个创建抽象产品对象的操作接口。担任这个角色的是工厂方法模式的核心,

3、它是与应用系统的商业逻辑无关的。通常使用Java接口或者抽象Java类实现,而所有的具体工厂类必须实现这个Java接口或继承这个抽象Java类。2.实体工厂类(ConreteFactory)角色:这个角色直接在客户端的调用下实现创建具体产品对象的操作。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的。通常使用具体Java类实现这个角色。3.抽象产品(AbstractProduct)角色:为一类产品对象声明一个接口。担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。通常使用Java接口或者抽象Java类实现这一角

4、色。4.实体产品(ConcreteProduct)角色:定义一个将被相应的具体工厂创建的产品对象。抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。这是客户端最终需要的东西,其内部一定充满了应用系统的商业逻辑。通常使用具体Java类实现这个角色。即用抽象工厂生产抽象产品,用实体工厂生产实体产品,用抽象产品提供实体产品访问接口,用实体产品实现自己的功能。在抽象工厂中,我们引进“产品族”的概念:产品族是指位于不同产品等级结构中,功能相关联的产品组成的家族。一般是位于不同的等级结构中的相同位置上。对于产品族而言,每一个抽象产品都有多于一个的具体产品;每一个具体

5、工厂类对应一个产品族,对应于每一个产品族都有一个具体工厂。而每一个具体工厂负责创建属于同一个产品族、但是分属于不同等级结构的产品。   抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广。假设一个子系统需要一些产品对象,而这些产品又属于一个以上的产品等级结构,那么为了将消费这些产品对象的责任和创建这些产品对象的责任分割开来,可以引进抽象工厂模式。这样的话,消费产品的一方不需要直接参与产品的创建工作,而只需要向一个公用的工厂接口请求所需要的产品。通过使用抽象工厂模式,可以处理具有相同(或者相似)等级结构的多个产品族中的产品对象创建问题。适用性:在以下情况可以

6、使用AbstractFactory模式•一个系统要独立于它的产品的创建、组合和表示时。•一个系统要由多个产品系列中的一个来配置时。•当你要强调一系列相关的产品对象的设计以便进行联合使用时。•当你提供一个产品类库,而只想显示它们的接口而不是实现时。协作:通常在运行时刻创建一个ConcreteFactory类的实例。这一具体的工厂创建具有特定实现的产品对象。为创建不同的产品对象,客户应使用不同的具体工厂。AbstractFactory将产品对象的创建延迟到它的ConcreteFactory子类。实例:abstractFactorypublicinterfaceIAni

7、malFactory{ICatcreateCat();IDogcreateDog();}ConcreteFactorypublicclassBlackAnimalFactoryimplementsIAnimalFactory{publicICatcreateCat(){returnnewBlackCat();}publicIDogcreateDog(){returnnewBlackDog();}}publicclassWhiteAnimalFactoryimplementsIAnimalFactory{publicICatcreateCat(){returnnew

8、White

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。