桥接模式
把抽象和实现解耦,使二者可以独立变化
类图

(图来自wiki)
- abstraction(抽象的层次),implementor(实现的层次)
- 抽象的层次通过持有实现的层次,实现类之间的桥接
- 两个层次之间可以独立扩展而不会影响对方。
示例
public interface EndPlace { void to(); } public class EndPlaceA implements EndPlace { @Override public void to() { System.out.println("去A"); } } public class EndPlaceB implements EndPlace { @Override public void to() { System.out.println("去B"); } } public abstract class StartPlace { EndPlace endPlace; protected StartPlace(EndPlace endPlace){ this.endPlace = endPlace; } abstract void from(); } public class StartPlaceA extends StartPlace { public StartPlaceA(EndPlace endPlace){ super(endPlace); } @Override void from() { System.out.println("来自A"); } } public class StartPlaceB extends StartPlace { protected StartPlaceB(EndPlace endPlace) { super(endPlace); } @Override void from() { System.out.println("来自B"); } } public class Client { public static void main(String[] args){ StartPlace sa = new StartPlaceA(new EndPlaceB()); sa.from(); sa.endPlace.to(); sa = new StartPlaceA(new EndPlaceA()); sa.from(); sa.endPlace.to(); StartPlace sb = new StartPlaceB(new EndPlaceB()); sb.from(); sb.endPlace.to(); sb = new StartPlaceB(new EndPlaceA()); sb.from(); sb.endPlace.to(); } }
运行结果

桥接模式与策略模式
- 桥接关注的是抽象层和实现层之间的解耦,抽象层和实现层可以各自扩展,策略是为context选择不同的实现行为。
- 桥接是结构型,策略是行为型。
- 桥接模式 eg:汽车和跑,汽车A可以跑,汽车B也可以跑,跑可以有很多不同的内在实现。但是汽车只关心跑这一个动作,而不关心跑是怎么实现的,跑也只知道汽车会跑,而不会关心是什么类型的汽车。通过汽车持有跑,把两个对象连接起来就是桥接模式。
- 策略模式 eg:一辆汽车的行为,可以是漂移,可以是加速,可以是减速,把汽车不同的行为封装起来供汽车选择就是策略模式。
语言是思想的载体

浙公网安备 33010602011771号