桥梁模式
橋梁模式:其實就是把抽象和實現解耦,解決了繼承的缺點,實現可以不用受抽象的約束,不用再綁定在一個固定的抽象層次上。
公司產品橋梁模式案例
? ?如果使用普通的繼承,那動態具有好多種公司,房地產、服裝公司、餐飲公司,然而房地產公司又可以分為 公寓房公司、別墅房公司等等...這樣的話,子類就太多啦,擴展也不是很方便。
? 如果使用橋梁模式,把公司和產品解耦,每種類型的公司可以與任意的產品組合。且產品不用受公司抽象類的約束,擴展方便
具體的代碼如下:
Product.java? 實現角色代碼如下
?
package com.designModel.Bridgemodel;/*** 實現角色 的抽象類*/ public abstract class Product {//生產public abstract void product();//銷售public abstract void sell(); }?
Copr.java 抽象角色
package com.designModel.Bridgemodel;/*** 抽象角色*/ public abstract class Copr {//實現角色private Product product;public Copr(Product product) {this.product = product;}//公司的目的就是賺錢public void makeMoney() {this.product.product();this.product.sell();} }?
?
具體的抽象角色
HouseCopr.java?
package com.designModel.Bridgemodel;public class HouseCopr extends Copr {public HouseCopr(Product product) {super(product);}@Overridepublic void makeMoney() {super.makeMoney();System.out.println("房地產公司賺大錢");} }?
?
ShanZhaiCopr.java
package com.designModel.Bridgemodel;public class ShanZhaiCopr extends Copr {public ShanZhaiCopr(Product product) {super(product);}@Overridepublic void makeMoney() {super.makeMoney();System.out.println("山寨公司賺錢");} }?
?具體的實現角色
Clothes.java
package com.designModel.Bridgemodel;public class Clothes extends Product {@Overridepublic void product() {System.out.println("生成衣服");}@Overridepublic void sell() {System.out.println("銷售衣服");} }?
?
?Ipod.java
package com.designModel.Bridgemodel;public class Ipod extends Product {@Overridepublic void product() {System.out.println("生產Ipod產品");}@Overridepublic void sell() {System.out.println("銷售Ipod產品");} }?
?
Client.java調用類
package com.designModel.Bridgemodel;public class Client {
public static void main(String... args) {
HouseCopr houseCopr = new HouseCopr(new Clothes());
houseCopr.makeMoney();
System.out.println("--------------------");
ShanZhaiCopr shanZhaiCopr = new ShanZhaiCopr(new Ipod());
shanZhaiCopr.makeMoney();
System.out.println("------------------");
ShanZhaiCopr shanZhaiCopr1 = new ShanZhaiCopr(new Clothes());
shanZhaiCopr1.makeMoney();
}
}
?
橋梁模式關系類圖如下
?
Abstraction---------------抽象化角色
它的主要指責是定義出該角色的行為,同時保存一個對實現化角色的引用,該角色一般是抽象類
?
Implementor---------------實現化角色
它是接口或抽象類,定義角色必需的行為和屬性
?
RefinedAbstraction--------------修正抽象化角色
它引用實現化角色對抽象化角色進行修正
?
ConcreteImplementor---------具體實現化角色
它實現接口或抽象類定義的方法和屬性
?
Implementor.java
package com.designModel.Bridgemodel;public interface Implementor {void doSomething();void doAnything();}?
ConcreteImplementor1.java
package com.designModel.Bridgemodel;public class ConcreteImplementor1 implements Implementor {@Overridepublic void doSomething() {}@Overridepublic void doAnything() {} }?
Abstraction.java
?
package com.designModel.Bridgemodel;public abstract class Abstraction {private Implementor implementor;public Abstraction(Implementor _impl) {this.implementor = _impl;}public void request() {this.implementor.doSomething();}public Implementor getImp() {return implementor;} }?
?
具體抽象化角色
package com.designModel.Bridgemodel;public class RefinedAbstraction extends Abstraction {public RefinedAbstraction(Implementor _impl) {super(_impl);}//修正父類的行為 @Overridepublic void request() {super.request();super.getImp().doAnything();} }?
轉載于:https://www.cnblogs.com/09120912zhang/p/9324395.html
總結
- 上一篇: 圆周率前100位记忆(房屋地点桩法)
- 下一篇: jira 插件介绍地址