`

设计模式学习笔记——桥梁模式

阅读更多

 

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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics