04.(创建型模式)java设计模式之建造者模式
一、什么是建造者模式
- 使⽤多个简单的对象⼀步⼀步构建成⼀个复杂的对象,将⼀个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
 - 允许⽤户只通过指定复杂对象的类型和内容就可以构建它们,不需要知道内部的具体构建细节。
 
二、建造者的实现方式
模式结构分析:
Product(具体产品类):产品⻆⾊。
Builder(抽象建造类):抽象建造者,定义多个通⽤⽅法和构建⽅法。
ConcreteBuilder(具体建造类):具体建造者,可以有多个。
Director(指挥者类):指挥者,控制整个组合过程,将需求交给建造者,由建造者去创建对象。
类关系图:

统一模型:

代码实现:
查看代码
/*
* 建造者中具体的产品信息
* */
@Data
public class Computer {
    private String memory;
    private String cpu;
    private String mainboard;
    private String disk;
    private String power;
}
/*
* 抽象建造者
* */
public interface IComputerBuilder {
    void buildCpu();
    void buildMainboard();
    void buildDisk();
    void buildPower();
    void buildMemory();
    Computer createComputer();
}
/*
* 具体建造者
* */
public class HighComputerBuilder implements IComputerBuilder{
    Computer computer;
    public  HighComputerBuilder(){
        computer=new Computer();
    }
    @Override
    public void buildCpu() {
     computer.setCpu("这个是高配的CPU……");
    }
    @Override
    public void buildMainboard() {
        computer.setMainboard("这个是高配的主板……");
    }
    @Override
    public void buildDisk() {
        computer.setDisk("这个是高配的硬盘……");
    }
    @Override
    public void buildPower() {
        computer.setPower("这个是高配的电源……");
    }
    @Override
    public void buildMemory() {
        computer.setMemory("这个是高配的内存……");
    }
    @Override
    public Computer createComputer() {
        return computer;
    }
}
/*
 * 具体建造者
 * */
public class LowerComputerBuilder implements IComputerBuilder{
    Computer computer;
    public  LowerComputerBuilder(){
        computer=new Computer();
    }
    @Override
    public void buildCpu() {
        computer.setCpu("这个是低配的CPU……");
    }
    @Override
    public void buildMainboard() {
        computer.setMainboard("这个是低配的主板……");
    }
    @Override
    public void buildDisk() {
        computer.setDisk("这个是低配的硬盘……");
    }
    @Override
    public void buildPower() {
        computer.setPower("这个是低配的电源……");
    }
    @Override
    public void buildMemory() {
        computer.setMemory("这个是低配的内存……");
    }
    @Override
    public Computer createComputer() {
        return computer;
    }
}
/*
* 指挥者,控制整个组合过程,将需求交给建
造者,由建造者去创建对象
* */
public class ComputerDirector {
    public Computer createCompany(IComputerBuilder builder){
        builder.buildMemory();
        builder.buildCpu();
        builder.buildMainboard();
        builder.buildDisk();
        builder.buildPower();
        return builder.createComputer();
    }
}
测试用例:
/*
* 建造者模式的使用场景中的案例
* */
@Test
public void Builder(){
    IComputerBuilder builder=new HighComputerBuilder();
    ComputerDirector director=new ComputerDirector();
    Computer computer=director.createCompany(builder);
    System.out.println(computer.toString());
}
测试结果:
Computer(memory=这个是高配的内存……, cpu=这个是高配的CPU……, mainboard=这个是高配的主板……, disk=这个是高配的硬盘……, power=这个是高配的电源……)
方法评估:
优点:
- 
- 客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦。
 - 每⼀个具体建造者都相对独⽴,⽽与其他的具体建造者⽆关,更加精细地控制产品的创建过程。
 - 增加新的具体建造者⽆须修改原有类库的代码,符合开闭原则。
 - 建造者模式结合链式编程来使⽤,代码上更加美观。
 
 
缺点:
- 
- 建造者模式所创建的产品⼀般具有较多的共同点,如果产品差异⼤则不建议使⽤。
 
 
三、汇总
建造者模式与抽象⼯⼚模式的⽐较:
建造者模式返回⼀个组装好的完整产品 , 抽象⼯⼚模式返回⼀系列相关的产品,这些产品位于不同的产品等级结构,构成了⼀个产品族。
                    
                
                
            
        
浙公网安备 33010602011771号