设计模式之 建造者模式

建造者模式主要解决软件系统中复杂对象的创建问题,比如有些复杂对象的创建需要通过各部分的子对象用一定的算法构成,在需求变化时这些复杂对象将面临很大的改变,这十分不利于系统的稳定。但是,使用建造者模式能将他们各部分的算法包装起来,在需求变化后只需调整各个算法的组合方式和顺序,能极大提高系统的稳定性。建造者模式常被用于一些基本部件不会变而其组合经常变化的场景下。

建造者模式与工厂模式的最大区别是,建造者模式更关注产品的组合方式和装配顺序,而工厂模式关注产品的生产本身。

 

示例:

image

(1)定义需要生产的产品

public class Computer{
    private String cpu;
    private String memory;
    private String disk;
}

(2)定义描述产品构造和装配的抽象接口

public interface ComputerBuilder{
    void buildcpu();
    void buildmemory();
    void buildDisk();
    Computer buildComputer();
}

(3)实现接口 以实现构造和装配改产品的各个组件

public class ComputerConcreteBuilder implements ComputerBuilder{
    private final static Log logger = LogFactory.getLog(ComputerConcreteBuilder.class);
    
    Computer computer;
    
    public ComputerConcreteBuilder(){
        computer = new Computer();
    }
    
    @Override
    public void buildcpu(){
        logger.info("buildcpu......");
        computer.setCpu("8core");
    }
    
    @Override
    public void buildmemory(){
        logger.info("buildmemory......");
        computer.setMemory("16G");
    }
    
    @Override
    public void buildDisk(){
        logger.info("buildDisk......");
        computer.setDisk("1TG");
    }
    
    @Override
    public Computer buildComputer(){
        return computer;
    }
}

(4)实现产品装配

public class ComputerDirector{
    public Computer constructComputer(ComputerBuilder computerBuilder){
        computerBuilder.buildmemory();
        computerBuilder.buildcpu();
        computerBuilder.buildDisk();
        return computerBuilder.buildComputer();
    }
}

(5)构建产品

public static void main(String[] args){
    ComputerDirector computerDirector = new ComputerDirector();
    ComputerBuilder computerConcreteBuilder = new ComputerConcreteBuilder();
    Computer computer = computerDirector.constructComputer(computerConcreteBuilder);
    logger.info(computer.getCpu());
    logger.info(computer.getMemory());
    logger.info(computer.getDisk());
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


posted @ 2021-09-03 16:02  yeren2046  阅读(33)  评论(0编辑  收藏  举报