设计模式---桥梁模式

时间:2021-12-15 16:00:33

桥梁模式的定义:抽象的部分和他的实现部分分离,是他们都可以独立的变化。

一般一个抽象有多个实现时我们一般通过继承来协调他们,通过定义抽象的接口用子类来实现,这样方法有时不太灵活,很难使抽象部分和实现部分单独修改。

此时我们通过桥梁模式将他们拆分开来,就能很好的解决这个问题。

桥梁模式使用的是一个组合的关系。

桥梁模式有四个元素

抽象角色:它定义了一个接口而且拥有一个指向实现接口角色的一个引用;

具体抽象角色:实现并扩充抽象角色定义的接口;

实现角色:给出了实现类的接口,这里的接口可以与抽象角色中的接口不一致;

具体实现角色:实现了实现类接口的具体实现;

首先我们来看一下实例

 抽象角色:

/**
*
*/
package com.model.bridge;

/**
***************************************************************
* 项目名称:DescignModel
* 程序名称:Abstract
* 日期:2012-8-9 下午01:51:13
* 作者:
* 模块:
* 描述:
* 备注:
* ------------------------------------------------------------
* 修改历史
* 序号 日期 修改人 修改原因
*
* 修改备注:
* @version
***************************************************************
*/
public abstract class Abstract {
/**
*实现角色引用
*
* */
private Implement implement;

public void setImplement(Implement implement) {
this.implement = implement;
}

public Implement getImplement() {
return implement;
}

/**
*
* 方法名:method
* 描述:定义抽象类的接口
* 作者:
* 日期:2012-8-9 下午02:23:28
* @param
* @return void
*/
public abstract void method();
}
具体抽象角色:

/**
*
*/
package com.model.bridge;

/**
***************************************************************
* 项目名称:DescignModel
* 程序名称:RefinedAbstract
* 日期:2012-8-9 下午02:24:59
* 作者:白鹏飞
* 模块:
* 描述:
* 备注:
* ------------------------------------------------------------
* 修改历史
* 序号 日期 修改人 修改原因
*
* 修改备注:
* @version
***************************************************************
*/
public class RefinedAbstract extends Abstract {

/**
* 实现组合
*/
@Override
public void method() {
//实现抽象角色方法
System.out.println("This is RefinedAbstract");
//组合实现接口功能
getImplement().doIt();
}

}
实现角色:

/**
*
*/
package com.model.bridge;

/**
***************************************************************
* 项目名称:DescignModel
* 程序名称:Implement
* 日期:2012-8-9 下午01:53:50
* 作者:
* 模块:
* 描述:
* 备注:
* ------------------------------------------------------------
* 修改历史
* 序号 日期 修改人 修改原因
*
* 修改备注:
* @version
***************************************************************
*/
public interface Implement {
/**
*
* 方法名:doIt
* 描述:定义一些接口
* 作者:
* 日期:2012-8-9 下午03:45:38
* @param
* @return void
*/
public void doIt();
}
具体实现角色:

/**
*
*/
package com.model.bridge;

/**
***************************************************************
* 项目名称:DescignModel
* 程序名称:ConcreteImplement
* 日期:2012-8-9 下午02:27:19
* 作者:
* 模块:
* 描述:
* 备注:
* ------------------------------------------------------------
* 修改历史
* 序号 日期 修改人 修改原因
*
* 修改备注:
* @version
***************************************************************
*/
public class ConcreteImplement implements Implement {

/* (non-Javadoc)
* @see com.model.bridge.Implement#doIt()
*/
@Override
public void doIt() {
System.out.println("This is ConcreteImplement");
}

}

客户程序:

/**
*
*/
package com.model.bridge;

/**
***************************************************************
* 项目名称:DescignModel
* 程序名称:Client
* 日期:2012-8-9 下午02:29:15
* 作者:
* 模块:
* 描述:
* 备注:
* ------------------------------------------------------------
* 修改历史
* 序号 日期 修改人 修改原因
*
* 修改备注:
* @version
***************************************************************
*/
public class Client {

/**
* 方法名:main
* 描述:
* 作者:
* 日期:2012-8-9 下午02:29:15
* @param @param args
* @return void
*/
public static void main(String[] args) {
Implement implement = new ConcreteImplement();
Abstract abstr = new RefinedAbstract();
abstr.setImplement(implement);
abstr.method();
}

}

我们可以将上面的程序多设计抽象类接口和实现接口这样我们的程序可以多出很多的组合突显出一些特色

就是不仅仅可以实现功能还可以通过组合去完成新的功能。


并且我们在扩充和修改接口时缩小影响范围。

桥梁模式是一个非常强大的模式,仅仅看一看demo是无法充分利用和明白优势所在,还必须不断的实践。