模式目标
处理多维度变化
前言
现实生活中我们经常会遇到两种类型的笔,他们分别是毛笔和蜡笔。假设需要使用大、中、小3种型 的画笔来绘制12种不同的颜色。如果使用蜡笔,需要3 X 12 = 36 支。但是如果是毛笔的话,就不一样了,我们只需要3种型 的毛笔,和12盒颜料即可,涉及的对象个数仅为 3 + 12 = 15,要远远小于36,但是却可以实现与36种蜡笔一样的效果。如果要增加一种新型 的画笔,并且也需要12种颜色,相应的蜡笔需要增加12支,但是毛笔只需要增加一支即可。通过分析得知:在蜡笔中,颜色和型 两个不同的变化维度耦合在一起,无论是对颜色进行扩展,还是对型 进行扩展,都会对另一种维度产生影响。但在毛笔中,颜色和型 进行了分离,增加新的颜色或型 对另一方都没有任何影响。如果使用软件工程中的术语,可以认为,在蜡笔中颜色和型 之间存在较强的耦合性,而毛笔很好的将二者解耦,使用起来非常灵活,扩展也更为方便。在软件开发中,也提供了一种设计模式来处理与画笔类似的具有多变化维度的情况,即接下来要学习的桥接模式。
一、跨平台图像浏览系统
1.需求
A 公司打算开发一个跨平台图像浏览系统,要求该系统能够显示 BMP、JPG、GIF、PNG 等多种格式的文件,并且能够在 WIndows、Linux、UNIX 等多个操作系统上运行。该系统首先将各种格式的文件解析成像素矩阵(Matrix),然后将像素矩阵显示在屏幕上,在不同的操作系统中可以通过调用不同的绘制函数来绘制像素矩阵。该系统需具有较好的扩展性以支持新的文件格式和操作系统。
2.初始设计
A 公司开发人员针对上述要求,提出了一个初始设计方案,其基本结构如图:
二、桥接模式的概述
1.定义
桥接模式是一种很实用的结构型设计模式。如果软件系统中某个类存在两个独立变化的维度,通过该模式可以将这两个维度分离出来,使两者可以独立扩展,让系统更加符合单一职责原则。与多层继承方案不同,它将两个独立变化的维度设计为两个独立的继承等级结构,并且在抽象层建立一个抽象关联,该关联关系类似一条连接两个独立继承结构的桥,故名桥接模式。
桥接模式采用抽象关联取代了传统的多层继承,将类之间的静态继承关系转换为动态的对象组合关系,使得系统更加灵活,并易于扩展,同时有效控制了系统中类的个数。桥接模式的定义如下:
桥接模式(Bridge Pattern):将抽象部分与其实现部分分离,使它们都可以独立的变化。它是一种对象结构型模式,又称接口(Interface)模式。
2.结构
桥接模式的结构与其名称一样,存在一条连接两个独立继承等级结构的桥。桥接模式的结构如图:
三、完整解决方案
1.重构设计
为了减少所需生成的子类数目,实现将操作系统和图像文件格式两个维度分离,使它们可以独立改变,A公司开发人员使用桥接模式来重构跨平台图像浏览系统的设计。基本结构如下:
添加配置文件,将具体扩充抽象类和具体实现类类名都配置在配置文件中,再通过反射生成对象。
配置文件帮助类
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!