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

前言:设计模式

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

从这里开始: spa

桥接模式设计

1.做用:code

将一个抽象与实现解耦,以便二者能够独立的变化。(摘自wikiblog

2.UMLip

3.代码:ci

/** "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.评论:get

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

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

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

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

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

这才是真正有意义的地方。wait?我为何以为咱们在这里:偏题了。只有对抽象的扩充,已造成新的实现。没有出现和做用所言的,两者独立变化!!!

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

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

一旦抽象和实现解耦,意味这他们拥有着不一样的含义。这个时候,进行重构吧。

相关文章
相关标签/搜索