说真的在此以前,几乎没有对于桥接模式的应用场景概念。java
桥接(Bridge)是用于把抽象化与实现化解耦,使得两者能够独立变化。这种类型的设计模式属于结构型模式,它经过提供抽象化和实现化之间的桥接结构,来实现两者的解耦。编程
这种模式涉及到一个做为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。设计模式
咱们经过下面的实例来演示桥接模式(Bridge Pattern)的用法。其中,能够使用相同的抽象类方法可是不一样的桥接实现类,来画出不一样颜色的圆。this
意图
将抽象部分与实现部分分离,使它们均可以独立的变化。设计
主要解决
在有多种可能会变化的状况下,用继承会形成类爆炸问题,扩展起来不灵活。code
什么时候使用
实现系统可能有多个角度分类,每一种角度均可能变化。blog
如何解决
把这种多角度分类分离出来,让它们独立变化,减小它们之间耦合。继承
关键代码
抽象类依赖实现类。接口
缺点
桥接模式的引入会增长系统的理解与设计难度,因为聚合关联关系创建在抽象层,要求开发者针对抽象进行设计与编程。开发
Abstraction
public abstract class Shape { Color color; public void setColor(Color color) { this.color = color; } public abstract void draw(); }
RefinedAbstraction
圆形:Circle.java
public class Circle extends Shape{ public void draw() { color.bepaint("正方形"); } }
长方形:Rectangle.java
public class Rectangle extends Shape{ public void draw() { color.bepaint("长方形"); } }
正方形:Square.java
public class Square extends Shape{ public void draw() { color.bepaint("正方形"); } }
Implementor
public interface Color { public void bepaint(String shape); }
ConcreteImplementor
白色:White.java
public class White implements Color{ public void bepaint(String shape) { System.out.println("白色的" + shape); } }
灰色:Gray.java
public class Gray implements Color{ public void bepaint(String shape) { System.out.println("灰色的" + shape); } }
黑色:Black.java
public class Black implements Color{ public void bepaint(String shape) { System.out.println("黑色的" + shape); } }
Client
public class Client { public static void main(String[] args) { //白色 Color white = new White(); //正方形 Shape square = new Square(); //白色的正方形 square.setColor(white); square.draw(); //长方形 Shape rectange = new Rectangle(); rectange.setColor(white); rectange.draw(); } }
白色的正方形 白色的长方形