工厂三兄弟之抽象工厂模式(一)

转载 2013年12月05日 20:09:01

文章转载:http://blog.csdn.net/lovelion/article/details/9319181


工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。此时,我们可以考虑将一些相关的产品组成一个“产品族”,由同一个工厂来统一生产,这就是我们本文将要学习的抽象工厂模式的基本思想。

 

1 界面皮肤库的初始设计

       Sunny软件公司欲开发一套界面皮肤库,可以对Java桌面软件进行界面美化。为了保护版权,该皮肤库源代码不打算公开,而只向用户提供已打包为jar文件的class字节码文件。用户在使用时可以通过菜单来选择皮肤,不同的皮肤将提供视觉效果不同的按钮、文本框、组合框等界面元素,其结构示意图如图1所示:

界面皮肤库结构示意图

       该皮肤库需要具备良好的灵活性和可扩展性,用户可以自由选择不同的皮肤,开发人员可以在不修改既有代码的基础上增加新的皮肤。

       Sunny软件公司的开发人员针对上述要求,决定使用工厂方法模式进行系统的设计,为了保证系统的灵活性和可扩展性,提供一系列具体工厂来创建按钮、文本框、组合框等界面元素,客户端针对抽象工厂编程,初始结构如图2所示:

基于工厂方法模式的界面皮肤库初始结构图

       在图2中,提供了大量工厂来创建具体的界面组件,可以通过配置文件更换具体界面组件从而改变界面风格。但是,此设计方案存在如下问题:

       (1) 当需要增加新的皮肤时,虽然不要修改现有代码,但是需要增加大量类,针对每一个新增具体组件都需要增加一个具体工厂,类的个数成对增加,这无疑会导致系统越来越庞大,增加系统的维护成本和运行开销;

       (2) 由于同一种风格的具体界面组件通常要一起显示,因此需要为每个组件都选择一个具体工厂,用户在使用时必须逐个进行设置,如果某个具体工厂选择失误将会导致界面显示混乱,虽然我们可以适当增加一些约束语句,但客户端代码和配置文件都较为复杂。

       如何减少系统中类的个数并保证客户端每次始终只使用某一种风格的具体界面组件?这是Sunny公司开发人员所面临的两个问题,显然,工厂方法模式无法解决这两个问题,别着急,本文所介绍的抽象工厂模式可以让这些问题迎刃而解。

 

【作者:刘伟 http://blog.csdn.net/lovelion


相关文章推荐

【怎样写代码】工厂三兄弟之抽象工厂模式(六):扩展案例II

如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。If you like the content here, you can give me the greatest...

工厂三兄弟之抽象工厂模式

工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。此时,我们可以考虑将一...

工厂三兄弟之抽象工厂模式(四)

4 完整解决方案       Sunny公司开发人员使用抽象工厂模式来重构界面皮肤库的设计,其基本结构如图6所示:图6 界面皮肤库结构图       在图6中,SkinFactory接口充当抽象工厂,...
  • LoveLion
  • LoveLion
  • 2013年07月13日 16:47
  • 13400

工厂三兄弟之抽象工厂模式

抽象工厂模式概述 抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品。抽象工厂模式定义如下: ...

工厂三兄弟之抽象工厂模式(五)

5 “开闭原则”的倾斜性       Sunny公司使用抽象工厂模式设计了界面皮肤库,该皮肤库可以较为方便地增加新的皮肤,但是现在遇到一个非常严重的问题:由于设计时考虑不全面,忘记为单选按钮(Radi...
  • LoveLion
  • LoveLion
  • 2013年07月13日 16:58
  • 11262

工厂三兄弟之抽象工厂模式(一):界面皮肤库的初始设计

工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。此时,我们可以考虑将一...
  • will130
  • will130
  • 2016年01月04日 20:10
  • 227

工厂三兄弟之抽象工厂模式(三)

3 抽象工厂模式概述       抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品。抽象工厂模式定义如下:       ...
  • LoveLion
  • LoveLion
  • 2013年07月13日 16:40
  • 13622

工厂三兄弟之抽象工厂模式(一)

工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。此时,我们可以考虑将一...
  • LoveLion
  • LoveLion
  • 2013年07月13日 16:17
  • 15799

工厂三兄弟——抽象工厂模式

什么是抽象工厂模式抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品。抽象工厂模式定义如下:抽象工厂模式(Abstract...
  • Todo_
  • Todo_
  • 2016年02月17日 14:51
  • 431

【怎样写代码】工厂三兄弟之抽象工厂模式(二):解决方案

如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。If you like the content here, you can give me the greatest...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:工厂三兄弟之抽象工厂模式(一)
举报原因:
原因补充:

(最多只允许输入30个字)