参考文档:
1.设计模式-可复用面向对象软件的基础
2.http://blog.csdn.net/hguisu/article/details/7529194(设计模式(六)桥连模式Bridge(结构型))
桥接模式(Bridge)(对象结构型模式)
理论方面的知识,可以参考参考文档。
看一下bridge的结构:
书中讲的window例子的结构:
代码实现:
BrushPenAbstraction.java:
package com.rick.designpattern.bridge2; /** * Created by MyPC on 2017/6/26. */ public abstract class BrushPenAbstraction { protected ImplementorColor implementorColor; public void setImplementorColor(ImplementorColor implementorColor) { this.implementorColor = implementorColor; } public abstract void operationDraw(); }
BigBrushPenRefinedAbstraction.java:
package com.rick.designpattern.bridge2; /** * Created by MyPC on 2017/6/26. */ public class BigBrushPenRefinedAbstraction extends BrushPenAbstraction { @Override public void operationDraw() { System.out.println("big and " + implementorColor.bepaint() + " drawing"); } }
MiddleBrushPenRefinedAbstraction.java:
package com.rick.designpattern.bridge2; /** * Created by MyPC on 2017/6/26. */ public class MiddleBrushPenRefinedAbstraction extends BrushPenAbstraction { @Override public void operationDraw() { System.out.println("Middle and " + implementorColor.bepaint() + " drawing"); } }
SmallBrushPenRefinedAbstraction.java:
package com.rick.designpattern.bridge2; /** * Created by MyPC on 2017/6/26. */ public class SmallBrushPenRefinedAbstraction extends BrushPenAbstraction { @Override public void operationDraw() { System.out.println("Small and " + implementorColor.bepaint() + " drawing"); } }
ImplementorColor.java:
package com.rick.designpattern.bridge2; /** * Created by MyPC on 2017/6/26. */ public class ImplementorColor { protected String color; public String bepaint() { return color; } }
ConcreteImplementorBlack.java:
package com.rick.designpattern.bridge2; /** * Created by MyPC on 2017/6/26. */ public class ConcreteImplementorBlack extends ImplementorColor { public ConcreteImplementorBlack() { this.color = "black"; } }
ConcreteImplementorBlue.java:
package com.rick.designpattern.bridge2; /** * Created by MyPC on 2017/6/26. */ public class ConcreteImplementorBlue extends ImplementorColor { public ConcreteImplementorBlue() { this.color = "blue"; } }
ConcreteImplementorGreen.java:
package com.rick.designpattern.bridge2; /** * Created by MyPC on 2017/6/26. */ public class ConcreteImplementorGreen extends ImplementorColor { public ConcreteImplementorGreen() { this.color = "green"; } }
ConcreteImplementorRed.java:
package com.rick.designpattern.bridge2; /** * Created by MyPC on 2017/6/26. */ public class ConcreteImplementorRed extends ImplementorColor { public ConcreteImplementorRed() { this.color = "red"; } }
ConcreteImplementorWhite.java:
package com.rick.designpattern.bridge2; /** * Created by MyPC on 2017/6/26. */ public class ConcreteImplementorWhite extends ImplementorColor { public ConcreteImplementorWhite() { this.color = "white"; } }
BrushPenFactory.java:
package com.rick.designpattern.bridge2; /** * Created by MyPC on 2017/6/26. */ public class BrushPenFactory { private static BrushPenFactory _instance; private BrushPenAbstraction _BrushPenAbstraction; private BrushPenFactory() { } public static BrushPenFactory instance() { if (null == _instance) { _instance = new BrushPenFactory(); } return _instance; } public BrushPenAbstraction makeBrushPen() { _BrushPenAbstraction = new SmallBrushPenRefinedAbstraction(); _BrushPenAbstraction.setImplementorColor(new ConcreteImplementorBlack()); return _BrushPenAbstraction; } }
Client.java:
package com.rick.designpattern.bridge2; /** * Created by MyPC on 2017/6/26. */ public class Client { public static void main(String[] args) { BrushPenFactory.instance().makeBrushPen().operationDraw(); } }