设计模式之桥接模式
温馨提示:
本文最后更新于 2023年11月16日,已超过 433 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
桥接模式
桥接模式又称为柄体模式或接口模式,是用于把抽象化与实现化解耦,使得二者可以独立变化。它属于结构型模式。
适用场景
当一个类内部具备两种以上变化维度时,使用桥接模式可以解耦这些变化的维度,使高层代码架构稳定。桥接模式适合以下几种场景:
- 1.在抽象和具体实现之间需要增加更多的灵活性场景;
- 2.一个类存在两个以上独立变化的维度,而这些维度都需要进行独立扩展;
- 3.不希望被继承或因为多层继承导致系统类个数剧增;
桥接模式的一个常用场景就是为了替换继承。我们知道继承可以很好的帮助我们实现代码复用,但同时,这也是继承的一大缺点。因为父类拥有的方法,子类也会继承得到,无论子类是否需要。这说明了继承具有强侵入性,同时会导致子类臃肿。同时,多层继承方案违背了“单一职责原则”,复用性较差,且类的个数非常多。
优缺点
优点
- 抽象与实现分离,扩展能力强;
- 符合开闭原则;
- 符合合成复用原则;
- 实现细节对客户透明;
缺点
- 由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,能正确地识别系统中两个独立变化的维度,这增加了系统的理解与设计难度。
桥接模式的角色组成
- 抽象:定义抽象接口,通常包含对实现接口的引用;
- 扩展抽象:对抽象的扩展,可以是抽象类的子类或具体实现类;
- 实现:定义实现接口,提供基本操作的接口;
具体实现:实现接口的具体类;
实现
实现接口:
public interface Color { void coloring(String shape); }
具体实现
public class Green implements Color{ @Override public void coloring(String shape) { System.out.println("绿色的" + shape); } }
public class Red implements Color{ @Override public void coloring(String shape) { System.out.println("红色的" + shape); } }
public class White implements Color{ @Override public void coloring(String shape) { System.out.println("白色的" + shape); } }
抽象接口
public abstract class Shape { protected Color color; public void setColor(Color color){ this.color = color; } public abstract void draw(); }
扩展抽象
public class Circle extends Shape{ @Override public void draw() { color.coloring("圆形"); } }
public class Rectangle extends Shape{ @Override public void draw() { System.out.println("长方形"); } }
public class Square extends Shape{ @Override public void draw() { color.coloring("正方形"); } }
使用
public static void main(String[] args) { Color white = new White(); Shape square = new Square(); square.setColor(white); square.draw(); Shape circle = new Circle(); circle.setColor(white); circle.draw(); }
输出
白色的正方形
白色的圆形
正文到此结束
- 本文标签: 设计模式
- 本文链接: https://www.58cto.cn/article/18
- 版权声明: 本文由程序言原创发布, 非商业性可自由转载、引用,但需署名作者且注明文章出处:程序言 》 设计模式之桥接模式 - https://www.58cto.cn/article/18