設計模式四(建造者模式)

logo

定義

將一個複雜對象的構建與它的表示分離,同樣的構建過程可以創建不同的表示

使用場景

  • 複雜的產品類
  • 多樣性的功能

示例

Director(產品類)

public class PhoneProduct {
    private String system;
    private String cpu;
    private String ram;
    private String rom;

    public void setSystem(String system) {
        this.system = system;
    }

    public void setCpu(String cpu) {
        this.cpu = cpu;
    }

    public void setRam(String ram) {
        this.ram = ram;
    }

    public void setRom(String rom) {
        this.rom = rom;
    }

    @NonNull
    @Override
    public String toString() {
        return "\n系統:" + system + "\nCUP:" + cpu + "\n運存:" + ram + "\n內部儲存:" + rom;
    }
}

IBuilder(抽象建造者)

public interface IBuilderPhone {
    void buildSystem(String system);

    void buildCup(String cup);

    void buildRam(String ram);

    void buildRom(String rom);

    PhoneProduct build();
}

Builder(具體建造者)

public class BuilderPhone implements IBuilderPhone {
    private PhoneProduct mPhoneProduct = new PhoneProduct();


    @Override
    public void buildSystem(String system) {
        mPhoneProduct.setSystem(system);
    }

    @Override
    public void buildCup(String cpu) {
        mPhoneProduct.setCpu(cpu);
    }

    @Override
    public void buildRam(String ram) {
        mPhoneProduct.setRam(ram);
    }

    @Override
    public void buildRom(String rom) {
        mPhoneProduct.setRom(rom);
    }

    @Override
    public PhoneProduct build() {
        return mPhoneProduct;
    }
}

Director(導演類)

public class DirectorPhone {
    private IBuilderPhone mIBuilderPhone;

    public DirectorPhone(IBuilderPhone mIBuilderPhone) {
        this.mIBuilderPhone = mIBuilderPhone;
    }

    public PhoneProduct createPhone(String system, String cpu, String ram, String rom) {
        mIBuilderPhone.buildSystem(system);
        mIBuilderPhone.buildCup(cpu);
        mIBuilderPhone.buildRam(ram);
        mIBuilderPhone.buildRom(rom);
        return mIBuilderPhone.build();
    }
}

使用

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        PhoneProduct mPhoneProduct = new DirectorPhone(new BuilderPhone()).createPhone("EMUI", "麒麟", "4G", "16G");
        Log.i(TAG, "onCreate: "+mPhoneProduct.toString());
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章