最近学习到设计模式,现总结个人学习桥接模式内容【注重的是行为】。
上一篇:Java设计模式-策略模式
定义
将实现与抽象放到两个不同的层次中,使两个层次可以独立维护。
优缺点
优点
- 分离抽象接口及其实现部分。提高了比继承更好的解决方案。
- 桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。
缺点
- 由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
- 桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性。
实现
代码
桥接模式主要包含如下几个角色:
- Abstraction:抽象类。持有接口的引用。
- RefinedAbstraction:扩充抽象类,抽象方法的具体落地,以及桥接模式下接口行为的调用。
- Implementor:实现类接口,定义了接口的行为。
- ConcreteImplementor:具体实现类 ,对行为的具体实现。
桥的一端
/**
* 飞禽 (桥的这一端)
* 抽象定义了行为,以及组合了运动地点(桥的另一端)
* @author cc百川
*/
public abstract class Bird {
Road road;//保存路线的引用
//抽象类构造方法,用于约束子类需实现自身的构造方法
public Bird(Road road) {
super(); this.road = road;
}
abstract void motion();
}
/*
* 鸭子
* 实现了鸭子的运动方式
*/
class Duck extends Bird {
//父类的约束导致子类需要调用父类的有参构造/
public Duck(Road road) { super(road); }
@Override
public void motion() {
System.out.print("鸭运动在");
road.route();
}
}
/*
* 天鹅 ,飞禽的扩展
* 添加新的产品,不影响原有产品逻辑
*/
class Swan extends Bird{
public Swan(Road road) { super(road); }
@Override
public void motion() {
System.out.print("天鹅运动在");
road.route();
}
}
桥的另一端
//路可以分水,天,陆
public interface Road {
abstract void route();
}
/*
* 水路
*/
class WaterRoad implements Road{
@Override
public void route() {
System.out.println("水上路线");
}
}
/*
* 航路
*/
class EmptyRoad implements Road{
@Override
public void route() {
System.out.println("空中航线");
}
}
/*
* 扩展的产品功能,桥接模式的扩展不影响原有业务逻辑
*/
class LandRoad implements Road{
@Override
public void route() {
System.out.println("陆地公路");
}
}
测试
桥接模式适用于两个独立的维度之间产生的连接。
以上仅为个人学习,如果错误望指出,谢谢。