設計模式之建造者模式

今天學習了建造者模式,核心就是構建和表示分離。若是一個對象組成部分相對穩定,構建過程變幻無窮,則其能夠採用建造者模式。ide

建造者模式的核心思想:構建和表示分離學習

在建造者模式中,分爲三個部分:指導者,虛擬的建造者,實際的建造者測試

指導者:指導建造者進行建造,通用方法爲構造方法ui

虛擬建造者:抽象出對象所必須的方法 將建造過程抽象化spa

實際的建造者:也能夠稱之爲真實的建造者 能夠進行對象的逐步建造設計

在這裏我以電腦的構建爲例,寫了一個真實樣例,以便方便本身理解建造者模式;code

在個人設計中:對象

1.Engineer充當的是指導者的角色--->Directorblog

2.Firm充當的是抽象的建造者,聲明瞭建造者所必須的一些方法或者步驟---->Builderget

3.SAMSUNG是真實的建造者,實現了抽象建造者的方法,進行產品的構建---->ConcreteBuilder

4.Computer是產品,最終表現形式 

建造者模式的核心思想,構建過程與表現分離,如下是不一樣的角色的類

Director指導者:

package v3;

//工程師指導電腦的生產過程
public class Engineer {
    public Computer Build(Firm firm){
        firm.BuildComputerKeyBoard();
        firm.BuildComputerMaster();
        firm.BuildComputerMouse();
        firm.BuildComputerScreen();
        return  firm.BuildComputer();
    }

}

Builder抽象的建造者:

package v3;

//廠商 抽象
public abstract class Firm {

    public abstract void BuildComputerMaster();

    public abstract void BuildComputerScreen();

    public abstract void BuildComputerMouse();

    public abstract void BuildComputerKeyBoard();

    public abstract Computer BuildComputer();
}

ConcretBuilder真實的建造者:

package v3;

public class SAMSUNG extends   Firm {

    private Computer computer =null;

    public SAMSUNG() {

        computer =new Computer();
    }

    @Override
    public void BuildComputerMaster() {
        computer.Master="HP 越靈 真的好";
    }

    @Override
    public void BuildComputerScreen() {
        computer.Screen="HTC 更亮";
    }

    @Override
    public void BuildComputerMouse() {
        computer.Mouse="羅技 三億鼠標的槍戰夢想";
    }

    @Override
    public void BuildComputerKeyBoard() {
        computer.Keyboard="真機械鍵盤質感";
    }

    @Override
    public Computer BuildComputer() {
        return computer;
    }


}

Product產品:Computer

package v3;

//組成部分固定 組成方法急劇變化
public class Computer {

    public String Master;

    public String Screen;

    public String Mouse;

    public String Keyboard;

    @Override
    public String toString() {
        return "Computer{" +
                "Master='" + Master + '\'' +
                ", Screen='" + Screen + '\'' +
                ", Mouse='" + Mouse + '\'' +
                ", Keyboard='" + Keyboard + '\'' +
                '}';
    }
}

整個建造者模式的測試:

package v3;

//組成部分固定 組成方法急劇變化
public class Computer {

    public String Master;

    public String Screen;

    public String Mouse;

    public String Keyboard;

    @Override
    public String toString() {
        return "Computer{" +
                "Master='" + Master + '\'' +
                ", Screen='" + Screen + '\'' +
                ", Mouse='" + Mouse + '\'' +
                ", Keyboard='" + Keyboard + '\'' +
                '}';
    }
}

執行結果:

而後學習如何對建造者模式進行簡化,將指導者與抽象的建造者合併

指導者與抽象的建造者合併以後的結果是這樣的

package v4;

//廠商 抽象
public abstract class Firm {

    Computer computer=new Computer();

    public abstract void BuildComputerMaster();

    public abstract void BuildComputerScreen();

    public abstract void BuildComputerMouse();

    public abstract void BuildComputerKeyBoard();

    public  Computer BuildComputer(Firm firm){
        firm.BuildComputerKeyBoard();
        firm.BuildComputerMaster();
        firm.BuildComputerScreen();
        firm.BuildComputerMouse();

        return firm.getComputer();
    }

    public Computer getComputer(){
        return  computer;
    }
}

最後測試結果的代碼爲

        Firm firm =new ConcreteFirm();

        computer=firm.BuildComputer(firm);

核心是本身指導本身進行對象的建造。

相關文章
相關標籤/搜索