设计模式之桥接模式(Java语言描述)

标签: 设计模式
635人阅读 评论(0) 收藏 举报
分类:

桥接模式定义


將抽象部分与它的具体实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体模式或接口模式。

Decouple an abstraction from its implementation so that the two can vary independently.

单从定义来看,读者未必能够真正理解桥接模式的含义,假设我们有这样的应用场景,在一个CAD系统中我们需要绘制矩形、圆形、长方形三种图形,同时绘制的图形需要有蓝色、红色、绿色三种版本,此时我们至少有两种设计方案:

1.为每一种形状各自提供一套不同颜色的版本。

2.根据实际需要对图形和颜色进行任意组合。

两种设计方案对比:
第一种方案需要9个类,而且每增加一个颜色或图形系统中都要增加多个类。
第二种只需要6个类,且每增加一个一个形状或颜色只增加一个类。

像这种有两个维度的情况采用方案二进行设计,能够减少系统中类的个数,且系统扩展更为方便。设计方案二就是传说中的桥接模式的应用。桥接模式將继承关系转换为聚合关系,从而降低了类之间的耦合度。

桥接模式结构


桥接模式结构如下图所示:
桥接模式包含如下几个角色:
  • Abstraction:抽象类
  • RefinedAbstraction:扩充抽象类
  • Implementor:实现类接口
  • ConcreteImplementor:具体实现类

源代码

实现类接口Implementor:
public interface Implementor {
	void operationImpl();
}
实现类ConcreteImplementorA:
public class ConcreteImplementorA implements Implementor{

	@Override
	public void operationImpl() {
		System.out.println("ConcreteImplementorA operationImpl");
	}

}
实现类ConcreteImplementorB:
public class ConcreteImplementorB implements Implementor{

	@Override
	public void operationImpl() {
		System.out.println("ConcreteImplementorB operationImpl");
	}

}
抽象类Abstraction:
public class ConcreteImplementorB implements Implementor{

	@Override
	public void operationImpl() {
		System.out.println("ConcreteImplementorB operationImpl");
	}

}
扩充抽象类RefinedAbstraction代码:
public class RefinedAbstraction extends Abstraction{

	@Override
	public void operation() {
		this.getImpl().operationImpl();
	}

}
客户端Client:
public class Client {

	public static void main(String[] args) {
		Abstraction abs = new RefinedAbstraction();
		//具体实现交给客户端选择
		Implementor impl = new ConcreteImplementorB();
		abs.setImpl(impl);
		abs.operation();
	}
}

桥接模式的核心思想就是变继承关系为聚合关系,再回到绘制不同颜色图形的例子,使用桥接模式设计类图如下,具体的颜色由客户端进行选择。






0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:496844次
    • 积分:5960
    • 等级:
    • 排名:第4801名
    • 原创:130篇
    • 转载:33篇
    • 译文:22篇
    • 评论:150条
    统计
    Flag Counter
    小鼠
    个人简介
    Java工程师,参与过网上银行、短信平台、渠道整合平台等大型Java EE项目开发,2016年与清华大学出版社合作编写并出版《AngularJS入门与进阶》一书。

    图书封面:


    图书简介
    目前淘宝、京东等电商网站有售。
    点我购书
    联系方式: jiangrongbo@gmail.com
    博客专栏
    最新评论