龙空技术网

动手写一个桥接模式(JAVA示例版)

Linux云计算架构 122

前言:

现时你们对“java 桥接模式”可能比较着重,看官们都需要了解一些“java 桥接模式”的相关内容。那么小编也在网上汇集了一些关于“java 桥接模式””的相关知识,希望兄弟们能喜欢,你们快快来学习一下吧!

桥接模式的定义与特点

桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。

通过上面的讲解,我们能很好的感觉到桥接模式遵循了里氏替换原则和依赖倒置原则,最终实现了开闭原则,对修改关闭,对扩展开放。这里将桥接模式的优缺点总结如下。

桥接(Bridge)模式的优点是:

抽象与实现分离,扩展能力强符合开闭原则符合合成复用原则其实现细节对客户透明

缺点是:由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,能正确地识别出系统中两个独立变化的维度,这增加了系统的理解与设计难度。

桥接模式的应用场景

当一个类内部具备两种或多种变化维度时,使用桥接模式可以解耦这些变化的维度,使高层代码架构稳定。

桥接模式通常适用于以下场景。

当一个类存在两个独立变化的维度,且这两个维度都需要进行扩展时。当一个系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加时。当一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性时。

桥接模式的一个常见使用场景就是替换继承。我们知道,继承拥有很多优点,比如,抽象、封装、多态等,父类封装共性,子类实现特性。继承可以很好的实现代码复用(封装)的功能,但这也是继承的一大缺点。

因为父类拥有的方法,子类也会继承得到,无论子类需不需要,这说明继承具备强侵入性(父类代码侵入子类),同时会导致子类臃肿。因此,在设计模式中,有一个原则为优先使用组合/聚合,而不是继承。

很多时候,我们分不清该使用继承还是组合/聚合或其他方式等,其实可以从现实语义进行思考。因为软件最终还是提供给现实生活中的人使用的,是服务于人类社会的,软件是具备现实场景的。当我们从纯代码角度无法看清问题时,现实角度可能会提供更加开阔的思路。

示例实现化

/** * @DESCRIPT 实现化类 * 作用是:the function is:定义具体的实现接口;define specific implementation interface * @author 79197 */interface BridgeInterface {		public void SpecificImplementMethod();}
public class BridgeInterfaceA implements BridgeInterface{	@Override	public void SpecificImplementMethod() {		System.out.println("BridgeInterfaceA::这是具体实现化类的具体实现方法(This is concrete implementation method of concrete implementation class)");	}}
public class BridgeInterfaceB implements BridgeInterface{	@Override	public void SpecificImplementMethod() {		System.out.println("BridgeInterfaceB::这是具体实现化类的具体实现方法(This is concrete implementation method of concrete implementation class)");	}}
抽象化
/** * @DESCRIPT 抽象化类Abstract class * 作用是:组合实现化类,定义被 实现方法 combine concrete classes,define concrete method * @author 79197 */abstract class BridgeAbstract {		protected BridgeInterface bridgeInterface;	public BridgeAbstract(BridgeInterface bridgeInterfaceTemp) {		this.bridgeInterface=bridgeInterfaceTemp;	}	public abstract void needImplementMethod();	}
public class BridgeAbstractA extends BridgeAbstract{	public BridgeAbstractA(BridgeInterface bridgeInterfaceTemp) {		super(bridgeInterfaceTemp);	}	public void needImplementMethod() {		bridgeInterface.SpecificImplementMethod();	}}
测试
public class BridgeTest {	public static void main(String[] args) {		BridgeInterface imple01=new BridgeInterfaceA();		BridgeInterface imple02=new BridgeInterfaceB();				BridgeAbstractA abctraceObj1=new BridgeAbstractA(imple01);		abctraceObj1.needImplementMethod();				BridgeAbstractA abctraceObj2=new BridgeAbstractA(imple02);		abctraceObj2.needImplementMethod();	}}

标签: #java 桥接模式