您的位置:首页 > 其它

桥接模式-挣钱的设计模式。

2015-04-11 19:19 253 查看
前言:

写了N多年代码,知道设计模式已经有8,9年了,用过设计模式,有一些又很好的用处。但是也有一些是不应该存在的设计模式。

从这里开始:

桥接模式

1.作用:

将一个抽象与实现解耦,以便两者可以独立的变化。(摘自wiki

2.UML



3.代码:

/** "Implementor" */
interface DrawingAPI
{
public void drawCircle(double x, double y, double radius);
}

/** "ConcreteImplementor" 1/2 */
class DrawingAPI1 implements DrawingAPI
{
public void drawCircle(double x, double y, double radius)
{
System.out.printf("API1.circle at %f:%f radius %f\n", x, y, radius);
}
}

/** "ConcreteImplementor" 2/2 */
class DrawingAPI2 implements DrawingAPI
{
public void drawCircle(double x, double y, double radius)
{
System.out.printf("API2.circle at %f:%f radius %f\n", x, y, radius);
}
}

/** "Abstraction" */
interface Shape
{
public void draw();                                            // low-level
public void resizeByPercentage(double pct);     // high-level
}

/** "Refined Abstraction" */
class CircleShape implements Shape
{
private double x, y, radius;
private DrawingAPI drawingAPI;
public CircleShape(double x, double y, double radius, DrawingAPI drawingAPI)
{
this.x = x;  this.y = y;  this.radius = radius;
this.drawingAPI = drawingAPI;
}

// low-level i.e. Implementation specific
public void draw()
{
drawingAPI.drawCircle(x, y, radius);
}
// high-level i.e. Abstraction specific
public void resizeByPercentage(double pct)
{
radius *= pct;
}
}

/** "Client" */
class BridgePattern {
public static void main(String[] args)
{
Shape[] shapes = new Shape[2];
shapes[0] = new CircleShape(1, 2, 3, new DrawingAPI1());
shapes[1] = new CircleShape(5, 7, 11, new DrawingAPI2());

for (Shape shape : shapes)
{
shape.resizeByPercentage(2.5);
shape.draw();
}
}
}


4.评论:

这个模式是为了模式而模式,有一个问题:

如果代码写成这个样子,会有一门课叫做《重构》等待着你,这就是挣钱的原因。都让计算机专家赚走了。

Shape已经有了完全的抽象,DrawAPI有存在的必要马?No。看不到任何的用处?写在了Draw方法中和写在DrawAPI中没有任何区别。

实际上类似而真正有用的例子是输出到外设上:比如绘制到屏幕、压感笔上。但是这里的基本原理是:屏幕和压感笔实现了一套相同的绘画API。

Shape的Draw使用了绘制API,输出到真正的设备上。

这才是真正有意义的地方。wait?我为什么觉得我们在这里:偏题了。只有对抽象的扩充,已形成新的实现。没有出现和作用所言的,二者独立变化!!!

将一个抽象与实现解耦,以便两者可以独立的变化??抽象没有一丝一毫的变化,只有现实在变化。抽象没有丝毫的变化。一旦出现这种情况。抽象进行了变化,以为着什么。抽象进行了扩充,增强了功能。但是实现依然是抽象的实现。

(这不是外观模式吗?那么桥接模式在那里?)

一旦抽象和实现解耦,意味这他们拥有着不同的含义。这个时候,进行重构吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: