橋樑模式

橋樑模式:其實就是把抽象和實現解耦,解決了繼承的缺點,實現能夠不用受抽象的約束,不用再綁定在一個固定的抽象層次上。java

公司產品橋樑模式案例ide

   若是使用普通的繼承,那動態具備好多種公司,房地產、服裝公司、餐飲公司,然而房地產公司又能夠分爲 公寓房公司、別墅房公司等等...這樣的話,子類就太多啦,擴展也不是很方便。this

  若是使用橋樑模式,把公司和產品解耦,每種類型的公司能夠與任意的產品組合。且產品不用受公司抽象類的約束,擴展方便spa

具體的代碼以下:code

Product.java  實現角色代碼以下blog

 

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 get

package com.designModel.Bridgemodel;

public class HouseCopr extends Copr {

    public HouseCopr(Product product) {
        super(product);
    }

    @Override
    public void makeMoney() {
        super.makeMoney();
        System.out.println("房地產公司賺大錢");
    }
}

 

 

ShanZhaiCopr.java產品

package com.designModel.Bridgemodel;

public class ShanZhaiCopr extends Copr {

    public ShanZhaiCopr(Product product) {
        super(product);
    }

    @Override
    public void makeMoney() {
        super.makeMoney();
        System.out.println("山寨公司賺錢");
    }
}

 

 具體的實現角色

Clothes.java

package com.designModel.Bridgemodel;

public class Clothes extends Product {

    @Override
    public void product() {
        System.out.println("生成衣服");
    }
    @Override
    public void sell() {
        System.out.println("銷售衣服");
    }
}

 

 

 Ipod.java

package com.designModel.Bridgemodel;

public class Ipod extends Product {
    @Override
    public void product() {
        System.out.println("生產Ipod產品");
    }
    @Override
    public 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 {

    @Override
    public void doSomething() {

    }

    @Override
    public 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);
    }
    //修正父類的行爲
    @Override
    public void request() {
        super.request();
        super.getImp().doAnything();
    }
}
相關文章
相關標籤/搜索