设计模式学习笔记(四)—Bridge桥接模式
来源:互联网 发布:网络爬虫用什么语言写 编辑:程序博客网 时间:2024/05/21 18:37
《设计模式》一书对Bridge是这样描述的:
将抽象与其实现解耦,使它们都可以独立地变化。
大致意思是说:将一组实现与另一组使用他们的对象分离。这里的实现指的是抽象类及其
派生类用来实现自己的对象(而不是抽象类的派生类,这些派生类被称为具体类)。下面
是《Design Patterns Explained》书中的例子。其结构图如下:
下面是它的实现:
abstract class Shape{
protected Drawing myDrawing;
abstract public void draw();
Shape(Drawing drawing){
myDrawing=drawing;
}
protected void drawLine(){
myDrawing.drawLine();
}
protected void drawCircle(){
myDrawing.drawCircle();
}
}
class Rectangle extends Shape{
public Rectangle(Drawing darw){
super(darw);
}
public void draw(){
drawLine();
drawLine();
drawLine();
drawLine();
}
}
class Circle extends Shape{
public Circle(Drawing draw){
super(draw);
}
publicvoid draw(){
myDrawing.drawCircle();
}
}
abstract class Drawing{
abstract public void drawLine();
abstract public void drawCircle();
}
class V1Drawing extends Drawing{
public void drawLine(){
DP1.draw_a_line();
}
public void drawCircle(){
DP1.draw_a_circle();
}
}
class V2Drawing extends Drawing{
public void drawLine(){
DP2.drawLine();
}
public void drawCircle(){
DP2.drawCircle();
}
}
class DP1{
public static void draw_a_line(){
System.out.println("使用DP1的draw_a_line()画线");
}
public static void draw_a_circle(){
System.out.println("使用DP1的draw_a_circle()画圆");
}
}
class DP2{
public static void drawLine(){
System.out.println("使用DP2的drawLine()画线");
}
public static void drawCircle(){
System.out.println("使用DP2的drawCircle()画圆");
}
}
public class BridgeClient {
public static void main(String[] args) {
Drawing draw1=new V1Drawing();
Drawing draw2=new V2Drawing();
Shape shape1=new Rectangle(draw1);
shape1.draw();
Shape shape2=new Circle(draw2);
shape2.draw();
}
}
输出结果如下:
使用DP1的draw_a_line()画线
使用DP1的draw_a_line()画线
使用DP1的draw_a_line()画线
使用DP1的draw_a_line()画线
使用DP2的drawCircle()画圆
在这个例子中Shape对象实际上是一个Retangle或Circle对象,但Client并不知道到底是那个,因为它们看起来都一样。Drawing实际上是一个V1Drawing或V2Drawing,但Shape对象并知道到底是哪个,因为它们看起来都一样。DP1或DP2使用它的Drawing对象知道是哪一个。Shape是事物的抽象,Drawing是实现或者操作事物方法的抽象。他们两个都可以独立地变化。正如例子中所说那样,我们可以输出一个矩形可以使用V1Drawing也可以使用V2Drawing来完成,输出一个圆形也是一样都有两种方法。Bridge模式遵循了设计模式中两条基本策略:找出变化并封装之和优先使用对象聚集,而不是类继承。
小结:Bridge模式是一种抽象与其实现相分离的模式。它主要应用于:当事物是一组变化量,和对这些事物的操作方法(实现)也是一组变化量的情况,也就是说它们都是多变的。
- 设计模式学习笔记(四)—Bridge桥接模式
- 设计模式学习笔记八(Bridge桥接模式)
- [设计模式学习笔记]Bridge桥接模式
- 设计模式 笔记 桥接模式 Bridge
- 设计模式学习----Bridge桥接模式
- 设计模式学习笔记(八)——Bridge桥接模式
- 设计模式学习笔记(一): Bridge 模式
- 设计模式学习笔记--桥梁(Bridge)模式
- java 设计模式学习笔记十 bridge桥模式
- Bridge模式——设计模式学习笔记
- 设计模式学习笔记——桥接(Bridge)模式
- 设计模式(四):桥接模式(Bridge)
- 【设计模式学习笔记八】【结构型模式】【桥接模式(Bridge)】
- (7)设计模式笔记[桥接模式Bridge]
- 设计模式笔记16:桥接模式(Bridge Pattern)
- 学习:java设计模式—Bridge模式
- 《设计模式》学习笔记--桥接Bridge
- 设计模式之Bridge学习笔记
- 静态代理
- 设计模式学习笔记(六)—Decorator装饰模式
- [操作系统]学习操作系统的经典书籍
- linux内核常用宏学习——BUILD_BUG_ON
- 设计模式学习笔记(五)—Abstract Factory抽象工厂模式
- 设计模式学习笔记(四)—Bridge桥接模式
- 在VC中,系统时间的获取
- 随便写。
- 安下心来
- 帮助你的职业——15件现在就能做的简单事
- 女白领用“心”钓金龟婿,就该挨骂?dambolo
- 设计模式学习笔记(三)—-Strategy策略模式
- myeclipss 智能提示
- 设计模式学习笔记(二)—-Adapter适配器模式