安卓設計模式之Builder

安卓有很多設計模式,現在我們來說說構建者模式。


什麼是構建者模式?

參考網上的描述:將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。

我是這麼理解的,假如你想組裝一臺電腦主機來玩遊戲,可是你又不懂組裝的方式。所以我們需要請會組裝的人來幫忙。那組裝一臺主機需要知道你想要什麼樣的處理器,內存條,硬盤啊,等等。這樣既然請別人幫忙了,我們只需要告訴他我需要裝什麼樣的零件。那麼這樣你就省去了自己組裝的煩惱。

總之,簡單來說就是,讓別人幫你解決煩惱去完成你想要達成的目的。

那代碼上是怎麼實現的呢?


實現?

首先創建一個Person類。 裏面分別有五個屬性,並且給設置setter和getter方法。代碼如下:

public class Person {
     String name;
     int age;
     int sex;
     String address;
     int id;



    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getSex() {
        return sex;
    }

    public void setSex(int sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

然後,我們在其(Person類)裏創建一個靜態內部類。Builder
並且裏面同樣有和person一樣的屬性。僅提供setter方法。代碼如下:

 //提供一個構造代理的方法
   public static class Builder{
       String name;
       int age=0;
       int id=0;
       int sex;
       String address;

        public Builder setName(String name){
            this.name=name;
            return this;
        }

        public Builder setAge(int age){
            this.age=age;
            return this;
        }

        public Builder setId(int id){
            this.id=id;
            return this;
        }

        public Builder setSex(int sex){
            this.sex=sex;
            return this;
        }

        public Builder setAdress(String address){
            this.address=address;
            return this;
        }

   }

代碼寫完之後,我們在Person類裏添加一個構造方法,讓Builder和Person類綁定。

 public Person(Person.Builder builder){
        this.name=builder.name;
        this.age=builder.age;
        this.sex=builder.sex;
        this.address=builder.address;
        this.id=builder.id;
    }

最後在Builder類裏,添加構造方法:

 public Person build(){
            return new Person(this);
        }

然後在MainActivity裏面使用這個方法。

 Person builder=new Person.Builder()
                .setName("ss")
                .setAge(18)
                .setId(1)
                .setAdress("中國")
                .setSex(0)
                .build();

是不是很熟悉?和Okhttp的使用是一樣的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章