徹底明白Android設計模式—建造者模式

將一個複雜對象的 構建和表示 分離的模型
什麼意思呢,就是比如我要創建一個對象,我只需要把最重要的一些信息告訴他,他就可以幫我完成所有的事情,不需要了解具體的構建過程

接下來,我們直接實現一個建造者模式示例代碼

比如,我要製造一個手機,建造者模式可以讓我不用瞭解到具體手機怎麼生產的,只需要提供手機的一些參數,比如顏色,系統等,就可以製造出一個完整的手機了。

/**
     * 手機產品實體類,定義手機的一些屬性(顏色,系統)
     */
    public class Phone {
        private String color;
        private String os;

        public String getColor() {
            return color;
        }

        public void setColor(String color) {
            this.color = color;
        }

        public String getOs() {
            return os;
        }

        public void setOs(String os) {
            this.os = os;
        }
    }

    /**
     * 抽象的構建類
     */
    public abstract class Builder {
        public abstract void buildColor(String color);

        public abstract void buildOs(String os);
    }

    /**
     * 具體的構建類
     */
    public class HuaweiBuilder extends Builder {
        private Phone huaweiPhone = new Phone();

        @Override
        public void buildColor(String color) {
            huaweiPhone.setColor(color);
        }

        @Override
        public void buildOs(String os) {
            huaweiPhone.setOs(os);
        }

        public Phone getHuaweiPhone() {
            return huaweiPhone;
        }
    }

    /**
     * 導演類,導演所有的一切,構建對象的各個部分
     * 其實這就有點像什麼,像做了一些簡單的封裝,
     * 讓外面的人可以輕易的創建具體需要的對象,
     * 而不用知道里面做了啥
     */
    public class Director {
        Builder mBuilder;

        public Director(Builder builder) {
            this.mBuilder = builder;
        }

        public void constract(String color, String os) {
            mBuilder.buildColor(color);
            mBuilder.buildOs(os);
        }
    }

以上就是建造者模式完整一條鏈的代碼了。
現在我要製造一個手機就很簡單了,如下

    public void main() {
        Builder builder = new HuaweiBuilder();
        Director director = new Director(builder);
        director.constract("黃色", "Android");
    }

通過簡單的傳參,創建生產對象。
但是其實一般不這麼做,而是通過內部類方法通過builder的一種***鏈式表達構建對象***,比如dialog構建等,這裏也舉例說明:

public static class XiaomiPhone {
        private String color;
        private String os;

        private XiaomiPhone(Builder builder) {
            this.color = builder.color;
            this.os = builder.os;
        }

        public String getColor() {
            return color;
        }

        public String getOs() {
            return os;
        }

        static class Builder {
            private String color;
            private String os;

            public Builder setColor(String color) {
                this.color = color;
                return this;
            }

            public Builder setOs(String os) {
                this.os = os;
                return this;
            }

            public XiaomiPhone builder() {
                return new XiaomiPhone(this);
            }
        }
    }

然後我們實現起來就比較簡單了

public void main() {
        XiaomiPhone xiaomiPhone = new XiaomiPhone.Builder()
                .setColor("")
                .setOs("")
                .builder();
    }

在Android中的應用

哇,簡直不要太常見,dialog構建怎麼寫的?

AlertDialog.Builder builder = new AlertDialog.Builder(this).setIcon(R.mipmap.ic_launcher).setTitle("")
                .setMessage("").setPositiveButton("確定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                    
                    }
                }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                       
                    }
                });
        builder.create().show();

爲什麼用建造者模式呢?其實就是方便用戶使用的時候,知道要傳哪些參數,方便且正確。

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