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

原创 2015年11月21日 00:12:20

桥接模式定义


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

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();
	}
}

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






版权声明:本文为博主原创文章,转载请注明原文地址。

相关文章推荐

设计模式之合成模式(Java语言描述)

《JAVA与模式》一书中开头是这样描述合成(Composite)模式的: 合成模式属于对象的结构模式,有时又叫做“部分——整体”模式。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成...

Java语言实现的单例设计模式复习

1 单例设计模式概述 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。...

Java语言实现的装饰设计模式复习

1 装饰设计模式概述 在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 当想要对已有的对象进行功能增强时,可以定义一个类,将已有的...

java语言之单例设计模式

1.  非多线程下的单例设计模式     设计模式:对问题行之有效的解决方式,其实,它是一种思想。     单例设计模式解决的问题:就是可以保证一个类在内存中的对象唯一性。     比如多个程序...

设计模式之简单工厂类(Java语言)

operation类,这是一个抽象类,是所有运算类的父类。抽象方法是getResult(),供子类实现从而实现具体的运算功能public abstract class Operation { /...

java语言讲解singleton的编程思想---深入浅出单实例Singleton设计模式

深入浅出单实例Singleton设计模式前序单实例Singleton设计模式可能是被讨论和使用的最广泛的一个设计模式了,这可能也是面试中问得最多的一个设计模式了。这个设计模式主要目的是想在整个系统中只...

Java多线程设计模式详解学习笔记——Introduction1 Java语言的线程

GUI应用程序    几乎所有的GUI应用程序都会用多线程。举例来说加入现在有人在用word编辑一个比较大的文本文件刚刚才做过单字“查找”操作,当word进行查找时,屏幕上会出现“停止查找按钮”,用...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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