Builder建造者模式記錄(挖坑)

角色:

  • Buidler 抽象建造者
  • ConcreteBuilder 具體建造者
  • Director 指揮者(可以省略)
  • Product 產(chǎn)品
建造者模式(盜圖)

1. 抽象產(chǎn)品類University

public abstract class University {
    protected String uName;
    protected int uAge;
    protected String uAddress;

    protected University() {

    }

    public abstract void setName(String name);

    public abstract void setAge(int age);

    public abstract void setAddress(String address);

    @Override
    public String toString() {
        return this.getClass().getSimpleName() + ":\n{" +
                "\n  學(xué)校:" + uName +
                "\n  校齡:" + uAge +
                "\n  地址:" + uAddress +
                "\n}";
    }
}

2.抽象建造者類UniversityBuilder

public abstract class UniversityBuilder<T extends University> {
    public abstract   T builder();

    public abstract void setName(String name);

    public abstract void setAge(int age);

    public abstract void setAddress(String address);
}

3.具體產(chǎn)品類HenanUniversity

public class HenanUniversity extends University {

    protected HenanUniversity() {
    }

    @Override
    public void setName(String name) {
        uName = name;
    }

    @Override
    public void setAge(int age) {
        uAge = age;
    }

    @Override
    public void setAddress(String address) {
        uAddress = address;
    }
}

4.具體建造者HenanUniversityBuilder

public class HenanUniversityBuilder extends UniversityBuilder <HenanUniversity>{
    private HenanUniversity henanUniversity = new HenanUniversity();

    @Override
    public HenanUniversity builder() {
        return henanUniversity;
    }

    @Override
    public void setName(String name) {
        henanUniversity.setName(name);
    }

    @Override
    public void setAge(int age) {
        henanUniversity.setAge(age);
    }

    @Override
    public void setAddress(String address) {
        henanUniversity.setAddress(address);
    }
}

5.指揮者HenanUniversityDirector

public class HenanUniversityDirector {
    private HenanUniversityBuilder builder;

    public HenanUniversityDirector(HenanUniversityBuilder builder) {
        this.builder = builder;
    }

    public void construct(String name, int age , String address){
        builder.setName(name);
        builder.setAge(age);
        builder.setAddress(address);
    }
}

6.測試

public class BuilderDemo {
    public static void main(String[]args){
        HenanUniversityBuilder builder = new HenanUniversityBuilder();
        HenanUniversityDirector director = new HenanUniversityDirector(builder);

        director.construct("河南大學(xué)",104,"河南開封");

        HenanUniversity henanUniversity =  builder.builder();
        System.out.println(henanUniversity);
    }
}

運行結(jié)果:
HenanUniversity: { 學(xué)校:河南大學(xué) 校齡:104 地址:河南開封 }


挖坑。這里并不了解實際的使用場景。鴻洋大神的封裝OkHttpUtils使用到了建造者模式,學(xué)習查看OkHttpUtls如何封裝的時候,一開始代碼看的有點懵,慢慢才看懂。這里簡單記錄一下。希望以后再看到采用Builder模式封裝的庫可以有些幫助。以后對設(shè)計模式有些了解后,再來補充。

2016.08.22 17:06

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容