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

  • 相关阅读:
    Java_JDK_TreeMap
    回归——线性回归,Logistic回归,范数,最大似然,梯度,最小二乘……
    机器学习——SVM详解(标准形式,对偶形式,Kernel及Soft Margin)
    npm start 作用
    Cookie禁用了,Session还能用吗?
    jquery判断页面滚动条(scroll)是上滚还是下滚,且是否滚动到头部或者底部
    js怎么判断浏览器类型
    移动端touch触屏滑动事件、滑动触屏事件监听!
    js中的caller和callee属性
    【分享】分享一个压缩 PNG 的网站 TinyPNG
  • 原文地址:https://www.cnblogs.com/betterwgo/p/15223499.html
Copyright © 2011-2022 走看看