Bridge Mode
又称为柄体模式或接口模式
桥梁模式含有2个等级结构
1 由抽象化角色和修正抽象化角色组成的抽象化等级结构
2 由实现化角色和两个具体实现化角色所组成的实现化等级结构
桥梁模式设计的角色:
●抽象化角色:抽象化给出的定义,并保存一个对实现化对象的引用
●修正抽象化角色:扩展抽象化角色,改变和修正父类对抽象化的实现
●实现化角色:给出实现化角色的接口
●具体实现化角色:给出实现化角色对象接口的具体实现
依旧懒人盗图:
书上草草扫了一遍概念,完全没有弄明白他在讲的是什么东西,于是上网找相关的资料,这才有点眉目。
同样参照网上,采用画图的例子来说明桥梁模式是如何作用的
对照着上面的类图
Shape为抽象化角色,其中只有一个待实现的draw方法
public interface Shape {
void draw();
}
Circle和Square为Shape的实现,其中接收一个Drawing对象,决定采用何种绘图方式
public class Circle implements Shape{
private Drawing drawing;
public Circle(Drawing drawing){
this.drawing=drawing;
}
public void draw() {
System.out.println("Draw Circle");
drawing.drawCircle();
}
}
public class Square implements Shape{
private Drawing drawing;
public Square(Drawing drawing){
this.drawing=drawing;
}
public void draw() {
System.out.println("Draw Square");
drawing.drawSquare();
}
}
Drawing为实现化角色,提供了不同画法的接口
public interface Drawing {
void drawCircle();
void drawSquare();
}
Drawing1和Drawing2就是两种具体画法的实现
public class Drawing1 implements Drawing{
public void drawCircle() {
System.out.println("Drawing1_circle");
}
public void drawSquare() {
System.out.println("Drawing1_square");
}
}
public class Drawing2 implements Drawing{
public void drawCircle() {
System.out.println("Drawing2_circle");
}
public void drawSquare() {
System.out.println("Drawing2_square");
}
}
最终可以灵活的构建不同的绘图组合
public class BridgePattern {
public static void main(String[] args) {
Shape circle=new Circle(new Drawing1());
Shape circle2=new Circle(new Drawing2());
Shape square=new Square(new Drawing1());
Shape square2=new Square(new Drawing2());
circle.draw();
square.draw();
circle2.draw();
square2.draw();
}
}
最终可以得到输出结果:
Draw Circle
Drawing1_circle
Draw Square
Drawing1_square
Draw Circle
Drawing2_circle
Draw Square
Drawing2_square
使用桥梁模式的时机:
●一个系统需要在构件的抽象化角色和具体化角色之间增加灵活性,避免2个层次之间建立的静态联系
●设计要求实现化角色的任何改变不影响客户端
●一个构件有多于一个的抽象化角色和实现化角色,需要动态耦合
●抽象化角色和具体化角色需要独立变化
当只有一个具体实现化角色的情况下,抽象的实现化角色可以被取消,也就是退化的桥梁模式
参考资料链接:
http://www.iteye.com/topic/57178 其中还有对于JDBC,Hibernate的Dao的类比,非常生动
http://www.iteye.com/topic/137469 另外一篇桥梁模式的文章
- 大小: 5.5 KB
分享到:
相关推荐
Solidworks学习笔记——随形变化.docxSolidworks学习笔记——随形变化.docxSolidworks学习笔记——随形变化.docxSolidworks学习笔记——随形变化.docxSolidworks学习笔记——随形变化.docxSolidworks学习笔记——...
Cocos2d-x学习笔记——完全掌握C++ API与游戏项目开发.zip
Oracle学习笔记——day02 学习的好东西 Oracle学习笔记——day02
Oracle学习笔记——day04 学习的好东西 Oracle学习笔记——day04
Oracle学习笔记——day05 学习的好东西 Oracle学习笔记——day05
Oracle学习笔记——day03 学习的好东西 Oracle学习笔记——day03
Oracle学习笔记——day01 学习的好东西Oracle学习笔记——day01
RRT学习笔记——记录
python 学习笔记——线性回归预测模型.pdf python 学习笔记——线性回归预测模型.pdf python 学习笔记——线性回归预测模型.pdf python 学习笔记——线性回归预测模型.pdf python 学习笔记——线性回归预测模型.pdf ...
Android学习笔记——获取网络图片并显示
jBPM-jPDL学习笔记——流程设计与控制
Go 学习笔记——雨痕,pdf文字版带书签。在不侵犯作者个人权利的前提下,可自由散播本书。
Python学习笔记——运算符 运算符: 赋值运算符 算术运算符 关系运算符 逻辑运算符 位运算
C语言学习笔记——小浪神
——————————————————————————————————————————————
ArcGIS客户端开发学习笔记——XML学习
A星算法学习笔记——记录
Python学习笔记——输入input(),input()使用,两个练习。
Python学习笔记——对象和类