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个子类,笔触大小画法 3 个子类。如果颜色种类多样,笔触大小多样,使用桥梁模式和不实用桥梁模式的子类数量相差更大。
桥梁模式通用类图
------
文章只为技术交流学习,若所写有误,请斧正,评论或消息与我,为不误导后来学习的人;若有不小心所写侵权,请告知我;若转载,请注明出处。
松下问童子,言师采药去。
只言此山中,云深不知处。