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

  • 相关阅读:
    Linux内核等待队列机制介绍
    对数学的思考
    Linux 进程状态
    linux内核链表
    linux内核的经典书籍
    似乎最近发的Blog又少了
    抽象——放弃细节的另外一个说法
    成长
    发现QQ的一个小问题
    放上了一篇几个月前写的东西
  • 原文地址:https://www.cnblogs.com/betterwgo/p/15223499.html
Copyright © 2011-2022 走看看