科学

抽象工厂模式

设计模式中的创建型模式

中文名:抽象工厂模式 外文名:Abstract Factory 适用领域: 所属学科: 是指:当有多个抽象角色 根据:LSP原则 创建:多个产品族中的产品对象
抽象工厂模式介绍
抽象工厂模式(Abstract Factory Pattern)隶属于设计模式中的创建型模式,用于产品族的构建。抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。[1]

原理

抽象工厂模式相对于工厂方法模式来说,就是工厂方法模式是针对一个产品系列的,而抽象工厂模式是针对多个产品系列的,即工厂方法模式是一个产品系列一个工厂类,而抽象工厂模式是多个产品系列一个工厂类。在抽象工厂模式中,客户端不再负责对象的创建,而是把这个责任丢给了具体的工厂类,客户端只负责对对象的调用,从而明确了各个类的职责。并且当一系列相互关联的产品被设计到一个工厂类里后,客户端的调用将会变得非常简单,而且,如果要更换这一系列的产品,则只需要更换一个工厂类即可。

分类

抽象工厂模式中存在四种角色,分别是抽象工厂角色,具体工厂角色,抽象产品角色,具体产品角色。n

抽象工厂角色:担任这个角色的是工厂方法模式的核心,它是与应用系统商业逻辑无关的。n

具体工厂角色:这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的。n

抽象产品角色:担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。n

具体产品角色:抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。这是客户端最终需要的东西,其内部一定充满了应用系统的商业逻辑。

功能

抽象工厂模式的一个主要功能是它能够隔离要生成的具体产品类,由于这些类的实际类名部被隐藏在工厂内部,因此客户端根本不需要关心如何对它们进行实例化的细节。每种设计模式都是针对特定问题的解决方案,而抽象工厂模式面临的问题则是当涉及到有多个产品等级结构寸,如何更好地进行软件体系结构的设计。

代码举例

假设我们有两种产品接口Button和Border,每一种产品都支持多种系列,比如Mac系列和Windows系列。这样每个系列的产品分别是MacButton,WinButton,MacBorder,WinBorder。为了可以在运行时刻创建一个系列的产品族,我们可以为每个系列的产品族创建一个工厂MacFactory和WinFactory。每个工厂都有两个方法CreateButton和CreateBorder并返回对应的产品,可以将这两个方法抽象成一个接口AbstractFactory。这样在运行时刻我们可以选择创建需要的产品系列。

优点

(1)分离了具体的类。客户通过抽象接口操纵实例,产品的类名也在具体工厂的实现中被分离,它们不出现在客户代码中。n

(2)易于交换产品系列。一个具体工厂类只在初始化时出现一次,这使得改变一个应用的具体工厂变得很容易,只需改变具体的工厂即可使用不同的产品配置。n

(3)有利于产品的一致性。当一个系列的产品对象被设计成一起工作时,一个应用一次只能使用同一个系列中的对象,这一点很重要,而抽象工厂很容易实现这一点。n

缺点

难以支持新种类的产品。因为抽象工厂接口确定了可以被创建的产品集合,所以难以扩展抽象工厂以生产新种类的产品。

相关资讯
内容声明

1、本网站为开放性注册平台,以上所有展示信息均由会员自行提供,内容的真实性、准确性和合法性均由发布会员负责,本网站对此不承担任何法律责任。

2、网站信息如涉嫌违反相关法律规定或侵权,请发邮件至599385753@qq.com删除。

Copyright © 趣爱秀