Bridge 桥梁模式

 

 

 

 注:桥梁模式是结构型设计模式,将抽象部分与它的实现部分相分离,使他们可以独立的变化。 

 

抽象部分可能有n种实现,而实现部分可能有n种实现方式,采用享元模式,减少子类数据。

 

曾经看过一个桥梁模式相关的例子,觉得挺好的。一个客户端需要调用一个作画程序。对画笔要求为,三种笔芯大小:小、中、大;三种颜色:红、黑、黄。

 

下面用java代码实现如下

1,颜色接口

 

package com.pattern.structure.bridge;

 

public interface Color {

 

public void use() ;

}

 

 

 

2,三种颜色实现

 

package com.pattern.structure.bridge;

 

public class Red implements Color {

 

@Override

public void use() {

 

System.out.println("use red...");

}

 

}

 

 

 

package com.pattern.structure.bridge;

 

public class Black implements Color {

 

@Override

public void use() {

 

System.out.println("use black...");

}

 

}

 

 

 

 

package com.pattern.structure.bridge;

 

public class Yellow implements Color {

 

@Override

public void use() {

 

System.out.println("use yellow...");

}

 

}

 

 

 

 

3,三种大小笔触画法

 

package com.pattern.structure.bridge;

 

public abstract class Pen {

 

protected Color color ;

 

public Pen(Color color) {

 

this.color = color ;

}

 

public abstract void draw() ;

}

 

package com.pattern.structure.bridge;

 

public class SmallPen extends Pen {

 

public SmallPen(Color color) {

super(color);

}

 

@Override

public void draw() {

 

color.use(); 

System.out.println("use small pen...");

 

}

 

}

 

 

package com.pattern.structure.bridge;

 

public class MiddlePen extends Pen {

 

public MiddlePen(Color color) {

super(color);

}

 

@Override

public void draw() {

 

color.use(); 

System.out.println("use middle pen...");

 

}

 

}

 

 

 

package com.pattern.structure.bridge;

 

public class BigPen extends Pen {

 

public BigPen(Color color) {

super(color);

}

 

@Override

public void draw() {

 

color.use(); 

System.out.println("use big pen...");

 

}

 

}

 

 

4,客户端调用

 

package com.pattern.structure.bridge;

 

public class Client {

 

public static void main(String[] args) {

 

Color color = new Red() ;

Pen pen = new BigPen(color) ;

pen.draw();

}

}

 

 

 

 

从上代码可以看出,如果不实用桥梁模式,要满足需求,得有3x3个子类,现在是颜色使用 3个子类,笔触大小画法 个子类。如果颜色种类多样,笔触大小多样,使用桥梁模式和不实用桥梁模式的子类数量相差更大。

 

桥梁模式通用类图

 

 

 

------

  文章只为技术交流学习,若所写有误,请斧正,评论或消息与我,为不误导后来学习的人;若有不小心所写侵权,请告知我;若转载,请注明出处。

 

 

 

 

posted @ 2013-10-05 09:03  li.zhiliang  阅读(298)  评论(0编辑  收藏  举报