zoukankan      html  css  js  c++  java
  • 设计模式之 建造者模式

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

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

    示例:

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

  • 相关阅读:
    碰撞的蚂蚁 牛客网 程序员面试金典 C++ Java Python
    空格替换 牛客网 程序员面试金典 C++ Python
    穿点最多的直线 牛客网 程序员面试金典 C++
    第K个数 牛客网 程序员面试金典 C++ Python
    React Native之图片/宽高/字体平台适配
    echarts玩转图表之矩形树图
    如何评价 Vue 的 Function-based Component?
    如何写一个像axios那样牛叉的请求库
    精读《Nuxtjs》
    react hooks系列之useRef
  • 原文地址:https://www.cnblogs.com/betterwgo/p/15223499.html
Copyright © 2011-2022 走看看