- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
桥接模式深入
12.5? 桥接模式(Bridge)
本节从以下几个方面来详细讲解桥接模式:
???? 桥接模式的核心思想。
???? 何时使用桥接模式。
???? 在Java中的应用—JDBC桥DriverManager。
12.5.1? 桥接模式的核心思想
桥接模式是软件设计模式中最复杂的模式之一,它把事物对象和其具体行为、具体特征分离开来,使它们可以各自独立的变化。桥接模式的用意是将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立变化。这句话有3个关键词,也就是抽象化、实现化和脱耦。
???? 抽象化:存在于多个实体中的共同的概念性联系,就是抽象化。作为一个过程,抽象化就是忽略一些信息,从而把不同的实体当做同样的实体对待。
???? 实现化:抽象化给出的具体实现,就是实现化。
???? 脱耦:所谓耦合,就是两个实体的行为的某种强关联。而将它们的强关联去掉,就是耦合的解脱,或称脱耦。在这里,脱耦是指将抽象化和实现化之间的耦合解脱开,或者说是将它们之间的强关联转换成弱关联。
将两个角色之间的继承关系改为聚合关系,就是将它们之间的强关联转换成为弱关联。因此,桥接模式中的所谓脱耦,就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以相对独立变化,这就是桥接模式的用意。
桥接模式所涉及的角色如下。
???? 抽象化(Abstraction)角色—桥接类:抽象化给出的定义,并保存一个对实现化对象的引用。
???? 修正抽象化(Refined Abstraction)角色—桥接具体类:扩展抽象化角色,改变和修正父类对抽象化的定义。
???? 实现化(Implementor)角色—目标接口:这个角色给出实现化角色的接口,但不给出具体的实现。必须指出的是,这个接口不一定与抽象化角色的接口定义相同,实际上,这两个接口可以非常不一样。实现化角色应当只给出底层操作,而抽象化角色应当只给出基于底层操作的更高一层的操作。
???? 具体实现化(Concrete Implementor)角色—目标实现类:这个角色给出实现化角色接口的具体实现。
如图12-21所示就是一个实现了桥接模式的示意性系统的结构图。
图12-21? 桥接模式结构图
图中的Client就可以通过Bridge桥来实现对Sourcable实现类的操作了。
下面来看具体的实现。
(1)Sourcable类的源代码如程序12-39所示,它定义了两个操作函数。
程序12-39? 源接口Sourcable.java
package structure.adapter;
/**
?* @author liuzhongbing
?* 源接口
?*/
public interface Sourcable {
??? public void operation();
}
(2)SourceSub1实现了Sourcable接口,实现函数operation ()负责输出一个字符串。其源代码如程序12-40所示。
程序12-40? 源接口的实现子类SourceSub1.java
package structure.adapter;
/**
?* @author liuzhongbing
?* 源接口的实现类
?*/
public class SourceSub1 extends DefaultWrapper {
??? public void operation() {
??????? System.out.println(源接口的一个实现子类Sub1);
??? }
}
(3)SourceSub2实现了Sourcable接口,实现函数operation ()负责输出一个字符串。其源代码如程序12-41所示。
程序12-41? 源接口的实现子类SourceSub2.java
package structure.adapter;
/**
?* @author liuzhongbing
?* 源接口的实现类
?*/
public class SourceSub2 extends DefaultWrapper {
??? public void operation() {
??????? System.out.println(源接口的一个实现子类Sub2);
??? }
}
(4)桥接类Bridge是一个抽象类,它拥有一个Sourcable对象,并可以通过getter/setter来设置该对象。其源代码如程序12-42所示。
程序12-42? 桥接类Bridge.java
package structure.bridge;
/**
?* @author Administrator
?* 桥接模式抽象类
?*/
public abstract
文档评论(0)