手机网站设计欣赏,小程序代理加盟政策,南宁制作网站多少钱,全屏响应式网站模板文章目录 概念结构实例总结 概念
桥接模式#xff1a;将抽象部分与它的实现部分解耦#xff0c;使得两者都能够独立变化。 毛笔和蜡笔都属于画笔#xff0c;假设需要有大、中、小三种型号的画笔#xff0c;绘画出12种颜色#xff0c;蜡笔需要3*1236支#xff0c;毛笔需要… 文章目录 概念结构实例总结 概念
桥接模式将抽象部分与它的实现部分解耦使得两者都能够独立变化。 毛笔和蜡笔都属于画笔假设需要有大、中、小三种型号的画笔绘画出12种颜色蜡笔需要3*1236支毛笔需要3支毛笔12个颜色15个对象。当扩展一种型号的画笔时蜡笔再需要12支毛笔只需要一支。毛笔的这种思想的本质就是桥接模式。 颜色和型号是两个不同的变化维度各自进行扩展理应该不影响另外一方但蜡笔将颜色和型号糅合在了一起这就产生了耦合当一方发生扩展时势必要引起另一方的变动。
结构
桥接模式的结构图如下 Abstraction(抽象类)用于定义抽象类的接口其中定义了一个Implementor类型的对象。Abstraction中可以使用Implementor中的方法通过关联的方式而不是继承。该接口即可以包含抽象业务方法也可以包含具体业务方法它可以理解为是毛笔。 RefinedAbstraction(扩充抽象类)它是Abstraction的实现。 Implementor(实现类接口)该接口提供一些基本的操作并将这些基本的实现让子类来完成它可以理解为是颜色。 ConcreteImplementor(具体实现类)它具体实现了Implementor接口在不同的ConcreteImplementor中有不同的实现操作。
实例
现在以毛笔为例实现它的demo 毛笔的抽象类
public abstract class Quill {protected Color color;protected Quill (Color color) {this.color color;}public abstract void draw(Color color);}颜色的抽象类与毛笔的抽象类是桥接关系。
public abstract class Color {abstract void color();
}
大号毛笔
public class BigQuill extends Quill {public BigQuill(Color color) {super(color);}Overridepublic void draw(Color color) {System.out.println(大号毛笔);color.color();}
}中号毛笔
public class MediumQuill extends Quill {public MediumQuill(Color color) {super(color);}Overridepublic void draw(Color color) {System.out.println(中号毛笔);color.color();}
}小号毛笔
public class SmallQuill extends Quill {public SmallQuill(Color color) {super(color);}Overridepublic void draw(Color color) {System.out.println(小号毛笔);color.color();}
}红色
public class RedColor extends Color {Overridevoid color() {System.out.println(红色);}
}绿色
public class GreenColor extends Color{Overridevoid color() {System.out.println(绿色);}
}
黑色
public class BlackColor extends Color{Overridevoid color() {System.out.println(黑色);}
}客户端
public class Client {public static void main(String[] args) {Color redColor new RedColor();Quill bigQuill new BigQuill(redColor);bigQuill.draw(redColor);}
}
总结
在使用桥接模式时应该识别出一个类具有两个独立的变化维度就比如毛笔本身具有一个维度需要画出颜色就需要另外一个维度–颜色颜色本身并不属于毛笔中的属性它和毛笔本身是一个“设置”关系所以它也可以作为一个抽象类和毛笔进行桥接。 桥接模式使用的场景 1、如果一个系统需要在抽象化和具体化之间增加更多的灵活性可以考虑通过桥接模式使它们建立一个抽象的管理关系。 2、抽象部分和被“设置”部分可以通过继承的方式独立扩展而不相互影响。 3、一个类存在多个独立的变化维度而这些维度需要独立的进行扩展。 4、不希望因为使用继承或多重继承而导致类的个数急剧增加的系统。