结构型模式之桥接

GOF对桥接模式(Bridge)的定义是:将抽象部分和它的实现部分分离,使它们可以独立地变化。这里需要记录一些概念,参考自《Java与模式》一书:

抽象化:存在于多个实体中的共同的概念性联系,例如:一组对象如果有相同的概念性联系,则可以用一个共同的类加以描述;如果一些类有相同的概念性联系,则可以用一个抽象类加以描述。

实现化:就是给出抽象化的具体实现,例如:一个对象是一个类的实现化;一个具体类可以是一个抽象类的实现化。

脱耦:耦合是两个实体具有某种强关联关系,将这种强关联关系去掉就是解耦的过程。所谓强关联是在编译时期就已经确定好了关系,例如:继承就是一种强关联关系;而弱关联关系则是在运行期间可以动态地改变关联状态,类的组合关系就是一种若关联关系,这在Java编程中是最常用的一种关系。

理解GOF所下定义的关键是搞明白“抽象” 和“实现”的含义,这里的抽象说白了就是指一个类及其子类,而“实现”是抽象类及其子类实现自己所用的对象,这句话用汉语说比较困难,请看《Design Patterns Explained》作者的表述:Implementations here means the objects that the abstract class and its derivations use to implement themselves with,这就是“实现”   的含义。比如:有一个图形的抽象类Shape,Shape有相应的子类,比如Rectange类,要实现一个Rectange对象,当然需要Draw方法,如果将Draw方法定义到Shape类中,那么每个继承自Shape类的子类都要自定义自己的Draw()方法,岂不是很麻烦,但是,如果将Draw()方法提炼出来单独放到一个类中(也就是Implementor)中,然后让Shape子类去调用对应的Draw()方法岂不是更妙,这样添加Shape子类就不用再在自己的类中添加Draw()方法了,而是调用相应的ConcreteImplementor中的Draw()方法,下面第一个图是Bridge模式的结构图,第二个图是《Design Patterns Explained》一书中所举画图例子的Bridge模式设计图

图1. Bridge模式结构图

图2. Bridge模式画图设计图

画图举例代码如下:

abstract class Shape{
	private Drawing drawing;
	public Shape(Drawing drawing){
		this.drawing=drawing;
	}
	public void Draw(){
		drawing.drawLine();
	}
}
class Rectange extends Shape{
	public Rectange(Drawing drawing){
		super(drawing);
	}
}
abstract class Drawing{
	public void drawLine(){};
	public void drawCircle(){};
}
class V1Drawing extends Drawing{
	public void drawLine(){
		System.out.println("Drawing Lines");
	}
	public void drawCircle(){
		System.out.println("Drawing Circles");
	}
}  

《Java与模式》一书还举例一个应用的例子,就是JDBC驱动器的实现利用的是桥梁模式

时间: 2024-10-12 05:18:03

结构型模式之桥接的相关文章

结构型模式之桥接模式

概述 桥接模式是一种很实用的结构型设计模式,如果软件系统中某个类存在两个独立变化的维度,通过该模式可以将这两个维度分离出来,使两者可以独立扩展,让系统更加符合“单一职责原则”.与多层继承方案不同,它将两个独立变化的维度设计为两个独立的继承等级结构,并且在抽象层建立一个抽象关联,该关联关系类似一条连接两个独立继承结构的桥,故名桥接模式.桥接模式用一种巧妙的方式处理多层继承存在的问题,用抽象关联取代了传统的多层继承,将类之间的静态继承关系转换为动态的对象组合关系,使得系统更加灵活,并易于扩展,同时有

6 结构型模式之 - 桥接模式

桥接模式的介绍:桥接模式,也称为桥梁模式,是结构型设计模式之一,在现实tgitk大家都知道"桥梁"是连接河道两岸的主要交通枢纽,简而言之其作用就是连接河的两边,而我们的桥梁模式与现实中的情况很是相似,也是承担着连接两边的作用. 桥接模式的定义:将抽象部分与实现部分分离,使它们都可以独立地进行变化 格拉模式的使用场景:从模式的定义中我们大致可以了解到,这里"桥梁"的作用其实就是连接"抽象部分"与"实现部分",但是事实上,任何多维

13结构型模式之桥接模式

概念 Bridge 模式又叫做桥接模式,是构造型的设计模式之一.Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任.它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展. 角色和职责 Client Bridge模式的使用者 Abstraction 抽象类接口(接口或抽象类)维护对行为实现(Implementor)的引用 Refined Abstraction

第9章 结构型模式—桥接模式

1. 桥接模式(Bridge Pattern)的定义 (1)将抽象部分与它的实现部分分离,使它们都可以独立地变化 ①一般的“抽象”与“实现”是指父子类的继承关系.但这里,GoF所谓的“抽象”是如果引起一个类变化是多维度的因素(设为2维),就将其他变化因素抽象成一个接口,在“Abstraction类”中只留这个接口,然后通过对象组合(而不是继承)的方式去依赖这个接口.而“实现”是指在让另一个“Implementor类”的子类去实现接口(第2维度的变化). ② “Abstraction类”和“Imp

设计模式(八):Bridge桥接模式 -- 结构型模式

1. 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度? 例子1:设想如果要绘制矩形.圆形.椭圆.正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色.绿色.蓝色等,此时至少有如下两种设计方案: •第一种设计方案是为每一种形状都提供一套各种颜色的版本. •第二种设计方案是根据实际需要对形状和颜色进行组合. 方案1: 方案2:  

结构型模式----桥接模式

1.由来 设想如果要绘制矩形.圆形.椭圆.正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色.绿色.蓝色等,此时至少有如下两种设计方案: 第一种设计方案是为每一种形状都提供一套各种颜色的版本. 第二种设计方案是根据实际需要对形状和颜色进行组合 对于有两个变化维度(即两个变化的原因)的系统,采用方案二来进行设计系统中类的个数更少,且系统扩展更为方便.设计方案二即是桥接模式的应用.(我喜欢叫他拼凑模式,先抽取共同点,然后用共同点去拼凑) 2.定义 桥接模式(Bridge P

设计模式07: Bridge 桥接模式(结构型模式)

Bridge 桥接模式(结构型模式) 抽象与实现 抽象不应该依赖于实现细节,实现细节应该依赖于抽象. 抽象B稳定,实现细节b变化 问题在于如果抽象B由于固有的原因,本身并不稳定,也有可能变化,怎么办? 举例来说 假如我们需要开发一个同时支持PC和手机的坦克游戏,游戏在PC和手机上功能都一样,都有同样的类型,面临同样的需求变化,比如坦克可能有多种不同的型号:T50,T75,T90…… 对于其中坦克设计,我们可能很容易设计出来一个Tank的抽象基类: /// <summary> /// 抽象Tan

设计模式(34)-----结构型模式-----桥接设计模式

桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化.这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦. 这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类.这两种类型的类可被结构化改变而互不影响. 我们通过下面的实例来演示桥接模式(Bridge Pattern)的用法.其中,可以使用相同的抽象类方法但是不同的桥接实现类,来画出不同颜色的圆. 介绍 意图:将抽象部分与实现部分分离,使它们都可以独立的变化. 主要解决:在有多

设计模式之“结构型模式”(一)

结构型模式主要分为七大模式,分别为:适配器模式.桥接模式.组合模式.装饰模式:.外观模式.享元模式.代理模式. 适配器模式 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 一.适用时期 1.适用一个已经存在的类,但如果它的接口,也就是它的方法和你的要求不相同时,就应该考虑适用适配器. 2.两个类所做的事情相同或相似,但是具有不同的接口时要使用它. 3.在双方都不太容易修改的时候再使用适配器模式适配. 二.DataAdapt