建造者模式(Builder)
建造者模式很像工厂模式,工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理, 用来创建复合对象,所谓复合对象就是指某个类具有不同的属性。建造者模式主要用于“分步骤构建一个复杂的对象”,在这其中“分步骤”是一个稳定的算法,而复杂对象的各个部分则经常变化。因此, 建造者模式主要用来解决“对象部分”的需求变化。这样可以对对象构造的过程进行更加精细的控制。
对于电脑我们都有或多或少的了解,下面就以自己组装一台电脑为例,来简单体现建造者模式.
例子:
//CPU接口
public interface CPU {
}
//Inter的cup
class IntelCPU implements CPU{
}
//AMD的cpu
class AMDCPU implements CPU{
}
2.内存接口以及实现类:
//内存接口
public interface Memory {
}
//金士顿内存
class KingstonMemory implements Memory{
}
//三星内存
class SamsungMemory implements Memory{
}
3. 主板接口以及实现类:
//主板内存
public interface Mainboard {
}
//华硕主板
class AsusMainboard implements Mainboard{
}
//技嘉主板
class GaMainboard implements Mainboard{
}
4.计算机POJO类:
//主板内存
public interface Mainboard {
}
//华硕主板
class AsusMainboard implements Mainboard{
}
//技嘉主板
class GaMainboard implements Mainboard{
}
5.计算机builder接口:
//计算机的builder的接口
public interface ComputerBuilder {
public void buildCPU();
public void buildMemory();
public void buildMainboard();
public Computer getComputer();
}
6.builder接口的实现类:
//联想电脑的builder
public class LenoveComputerBuilder implements ComputerBuilder {
private Computer lenoveComputer;
public LenoveComputerBuilder(){
lenoveComputer = new Computer();
}
public void buildCPU() {
lenoveComputer.setCpu(new IntelCPU());
}
public void buildMemory() {
lenoveComputer.setMemory(new KingstonMemory());
}
public void buildMainboard() {
lenoveComputer.setMainboard(new AsusMainboard());
}
public Computer getComputer() {
return lenoveComputer;
}
}
//惠普电脑的builder
public class HPComputerBuilder implements ComputerBuilder {
private Computer HPComputer;
public HPComputerBuilder(){
HPComputer = new Computer();
}
public void buildCPU() {
HPComputer.setCpu(new AMDCPU());
}
public void buildMemory() {
HPComputer.setMemory(new SamsungMemory());
}
public void buildMainboard() {
HPComputer.setMainboard(new GaMainboard());
}
public Computer getComputer() {
return HPComputer;
}
}
7.Directoe类,实现组装:
//Director类(导演)
//指导如何具体的创造电脑
public class Director {
private ComputerBuilder builder;
public Director(ComputerBuilder builder) {
this.builder = builder;
}
//用户自定义的自造顺序 具体指导各种builder如何创建电脑
public void construct() {
//builder.buildMemory();
builder.buildMainboard();
builder.buildCPU();
}
}
8. 测试:
//测试类
public class Test {
public static void main(String[] args) {
Computer lenoveComputer = null;
ComputerBuilder lenoveComputerBuilder = new LenoveComputerBuilder();
Director director = new Director(lenoveComputerBuilder);
director.construct();
lenoveComputer = lenoveComputerBuilder.getComputer();
System.out.println(lenoveComputer);
}
}
从这点看出,建造者模式将很多功能集成到一个类里,这个类可以创造出比较复杂的东西。所以与工程模式的区别就是:工厂模式关注的是创建单个产品,而建造者模式则关注创建适合对象的多个部分。因此,是选择工厂模式还是建造者模式,依实际情况而定。
例如一个Person类是由头、身体、脚三个对象组成,那么我们在建造者模式中就要先分别创造出这三个部分然后再把他们组装成一个Person对象。