设计模式之建造者模式

今天学习了建造者模式,核心就是构建和表示分离。如果一个对象组成部分相对稳定,构建过程千变万化,则其可以采用建造者模式。

建造者模式的核心思想:构建和表示分离

在建造者模式中,分为三个部分:指导者,虚拟的建造者,实际的建造者

指导者:指导建造者进行建造,通用方法为构造方法

虚拟建造者:抽象出对象所必须的方法 将建造过程抽象化

实际的建造者:也可以称之为真实的建造者 可以进行对象的逐步建造

在这里我以电脑的构建为例,写了一个真实样例,以便方便自己理解建造者模式;

在我的设计中:

1.Engineer充当的是指导者的角色--->Director

2.Firm充当的是抽象的建造者,声明了建造者所必须的一些方法或者步骤---->Builder

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);

核心是自己指导自己进行对象的建造。

posted @ 2019-08-06 21:27  coder-zhou  阅读(254)  评论(0编辑  收藏  举报