设计模式学习-桥接模式

原创 2018年04月17日 10:12:55

在细说桥接模式之前先讲解一个例子,若干年前,手机操作系统不像现在这么统一,那个时候的手机应用开发就很让人头大,因为同样的软件要适配不同的机型,用结构图表示如下:

看看起来还很简单清晰的,那么问题来了,如果增加一个手机品牌S,那么它也有M品牌具备的相同功能,如果我还需要增加拍照功能、音乐播放功能等等,这就会导致类和类继承层次增长到不可控制的规模。

对象的继承关系是在编译时就定义好的,所以无法再运行时改变从父类继承的实现。子类的实现与它的父类有非常紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化。当你需要复用子类时,如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类替换,这种依赖关系限制了灵活性并最终限制了复用性。这就涉及到了一个重要的设计原则:合成/聚合复用原则,即优先使用对象合成/聚合,而不是类继承。

合成/聚合都是关联的特殊种类,聚合表示一种弱的拥有关系,A对象可以包含B对象,但B对象不是A对象的一部分;合成则是一种强的拥有关系,体现了严格的部分和整体的关系,部分和整体的声明周期一样。举例说:聚合就是一辆车和一个车队的关系,而合成则是一个引擎和一辆车的关系。

使用该原则时,优先使用对象的合成/聚合将有助于你保存每个类被封装,并被集中在单个任务上,这样和类继承层次会保持较小规模。

基于该原则就有了桥接模式,桥接模式将抽象部分与它的实现部分分离,使它们都可以独立的变化。而其中的实现指的是抽象类和它的派生类用来实现自己的对象。


Implementor类

package com.bridge;

/**
 * @author Byp
 *
 */
public abstract class Implementor {
  public abstract void Operation();
}

ConcreteImplementorA类和ConcreteImplementorB类

package com.bridge;
/**
 * @author Byp
 */
public class ConcreteImplementorA extends Implementor {

	
	@Override
	public void Operation() {
			System.out.println("具体实现A的方法执行");
	}

}
package com.bridge;
/**
 * @author Byp
 */
public class ConcreteImplementorB extends Implementor {


	@Override
	public void Operation() {
		System.out.println("具体实现B的方法执行");
	}


}

Abstraction类

package com.bridge;

/**
 * @author Byp
 */
public abstract class Abstraction {
	protected Implementor implementor;

	public void SetImplementor(Implementor implementor) {
		this.implementor = implementor;
	}

	public abstract void Operation();

}

RefinedAbstraction类

package com.bridge;
/**
 * @author Byp
 *
 */
public class RefinedAbstraction extends Abstraction {

	@Override
	public void Operation() {
		implementor.Operation();
	}

}

Client测试类

package com.bridge;

/**
 * @author Byp
 */
public class Test {
	public static void main(String[] args) {
		Abstraction abstraction = new RefinedAbstraction();
		abstraction.SetImplementor(new ConcreteImplementorA());
		abstraction.Operation();
		
		abstraction.SetImplementor(new ConcreteImplementorB());
		abstraction.Operation();
	}
}

                                                                                   


                                                                                               以上内容总结学习自程杰老师的大话设计模式



版权声明:本文为博主原创文章,转载请声明原文来源,谢谢。 https://blog.csdn.net/solidsunshine/article/details/79970308

JAVA开发的23种设计模式之 --- 桥接模式

桥接模式 概述:将抽象部分与他的实现部分分离,这样抽象化与实现化解耦,使他们可以独立的变化.如何实现解耦的呢,就是通过提供抽象化和实现化之间的桥接结构.应用场景 实现系统可能有多个角度分类,每一种...
  • yeguxin
  • yeguxin
  • 2017-08-17 18:31:29
  • 318

大话设计模式—桥接模式

桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。主要解决:在有多种可能会变化的情况下,...
  • lmb55
  • lmb55
  • 2016-04-02 15:27:12
  • 1667

浅谈JAVA设计模式之——桥接模式(Bridge)

一、概述 将抽象部分与它的实现部分分离,使它们都可以独立地变化。 二、适用性 1.你不希望在抽象和它的实现部分之间有一个固定的绑定关系。 例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者...
  • l1028386804
  • l1028386804
  • 2015-05-03 12:25:34
  • 5806

设计模式:桥接模式(Bridge)

定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 意图:将抽象与实现解耦。  桥接模式主要应对的是由于实际的需要,某个类具有两个或者两个以上的维度变化(违反了SRP原则),如果只是用继...
  • u013256816
  • u013256816
  • 2016-03-28 19:02:57
  • 3097

大话设计模式-----(九)桥接模式、命令模式

桥接模式将抽象部分与他的实现部分分离,使他们都可以独立地变化实现指的是抽象类和他的派生类用来实现自己的对象就像不同牌子的手机,会有不同的功能,要是抽象手机,然后逐个添加功能,很多功能大家都有,但也有一...
  • qq_28295425
  • qq_28295425
  • 2017-04-03 10:46:34
  • 435

设计模式(结构型)之桥接模式(Bridge Pattern)

桥接模式是一种很实用的结构型设计模式,如果软件系统中某个类存在多个独立变化的维度,通过该模式可以将这多个维度分离出来,使他们可以独立扩展,让系统更加符合“单一职责原则”。与多层继承方案不同,它将多个独...
  • yanbober
  • yanbober
  • 2015-04-29 21:15:46
  • 4066

设计模式之桥接模式

  • 2017年12月07日 16:11
  • 18KB
  • 下载

GoF23种设计模式之结构型模式之桥接模式

一、概述         将类的抽象部分与实现分部分离开来,使它们都可以独立地变化。 二、适用性 1.你不希望在抽象和实现之间有一个固定的绑定关系的时候。例如:在程序运行时实现部分应可以被选择或切换。...
  • leverage_1229
  • leverage_1229
  • 2013-05-31 12:08:37
  • 1387

设计模式总结之Bridge Pattern(桥接模式)

将抽象部分与它的实现部分分离,使它们都可以独立地变化。
  • cooldragon
  • cooldragon
  • 2016-08-11 00:48:42
  • 4827

C++设计模式实现--桥接(Bridge)模式

一. 举例 N年前: 计算机最先出来时,软件和硬件是一绑在一起的,比如IBM出了一台电脑,上面有一个定制的系统,假如叫 IBM_Win,这个IBM_Win系统当然不能在HP电脑上运行,...
  • L_Andy
  • L_Andy
  • 2014-06-18 10:58:44
  • 1465
收藏助手
不良信息举报
您举报文章:设计模式学习-桥接模式
举报原因:
原因补充:

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