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

在建造者模式中,分为三个部分:指导者,虚拟的建造者,实际的建造者
指导者:指导建造者进行建造,通用方法为构造方法
虚拟建造者:抽象出对象所必须的方法 将建造过程抽象化
实际的建造者:也可以称之为真实的建造者 可以进行对象的逐步建造
在这里我以电脑的构建为例,写了一个真实样例,以便方便自己理解建造者模式;

在我的设计中:
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();
}
@Overridepublic void BuildComputerMaster() {
computer.Master="HP 越灵 真的好";
}
@Overridepublic void BuildComputerScreen() {
computer.Screen="HTC 更亮";
}
@Overridepublic void BuildComputerMouse() {
computer.Mouse="罗技 三亿鼠标的枪战梦想";
}
@Overridepublic void BuildComputerKeyBoard() {
computer.Keyboard="真机械键盘质感";
}
@Overridepublic Computer BuildComputer() {return computer;
}
}Product产品:Computer
package v3;//组成部分固定 组成方法急剧变化public class Computer {public String Master;public String Screen;public String Mouse;public String Keyboard;
@Overridepublic 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;
@Overridepublic 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);
核心是自己指导自己进行对象的建造。