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

    建造者模式把工人(对象组件的建造者ComputerCreator)给主管(Director),让主管告诉工人如何一步一步创建产品。

          各司其职,主管知道该怎么创建对象,但是不会创建具体的对象模块。工人会创建具体的模块但是不知道给怎样一步一步创建。两者组合创建出需要的对象。

      优势:把复杂对象的各个模块的具体创建和各个模块的组合分隔开,封装创建过程,避免在创建过程出错。

         可以方便扩展同一类型的对象,只需添加一个Creator即可。

    示例说明:用IBM和Lenovo的员工创建出各自的电脑。

    类图如下:

    看代码:

    ComputerCreator:定义所有的员工技能

    package com.zpj.designMode.builderpattern;
    
    public interface ComputerCreator {
    
        public void createCPU();
        public void createMainboard();
        public void createHardDisk();
        public void createDisplay();
    }

    IBMCreator 具体员工的实现

    package com.zpj.designMode.builderpattern;
    
    public class IBMCreator implements ComputerCreator {
    //按照IBM的组件型号创建各个组件
        @Override
        public void createCPU() {
    
        }
    
        @Override
        public void createMainboard() {
    
        }
    
        @Override
        public void createHardDisk() {
    
        }
    
        @Override
        public void createDisplay() {
    
        }
    
    }

    LenovoCreator 具体员工的实现

    package com.zpj.designMode.builderpattern;
    
    public class LenovoCreator implements ComputerCreator {
    //按照Lenovo的组件型号创建各个组件
        @Override
        public void createCPU() {
    
        }
    
        @Override
        public void createMainboard() {
    
        }
    
        @Override
        public void createHardDisk() {
    
        }
    
        @Override
        public void createDisplay() {
    
        }
    
    }

    只有Director 才知道电脑创建流程,你给他工人,他来告诉工人怎么创建。

    package com.zpj.designMode.builderpattern;
    
    public class Director {
        private ComputerCreator creator;
    
        public Director(ComputerCreator creator) {
            super();
            this.creator = creator;
        }
    
        //只有Director才知道该如何建造电脑,执行创建顺序是什么,都需要那些步骤。
        //creator是不知道的,员工只会制作一个个组件,但是不知道创建一个电脑需要哪些组件以及创建顺序
        //所有电脑的制造流程是一样的,不一样的是电脑的各个组件型号不同
        public void createComputer() {
            creator.createCPU();
            creator.createDisplay();
            creator.createHardDisk();
            creator.createMainboard();
        }
    
    }

    测试类:

    package com.zpj.designMode.builderpattern;
    
    import org.junit.Test;
    
    public class BuilderPatternTest {
    
        @Test
        public void test01(){
            //给主管一个IBM的员工让主管告诉IBM的员工怎么创建一个IBM电脑
            Director IBMDirector = new Director(new IBMCreator());
            IBMDirector.createComputer();
            //给主管一个Lenovo的员工让主管告诉IBM的员工怎么创建一个IBM电脑
            Director lenovoDirector = new Director(new LenovoCreator());
            lenovoDirector.createComputer();
        }
    }

    此模式的目的就是为了避免创建复杂对象(对象需要由多个模块进行组合)出现问题,而把其创建过程封装起来,当使用的时候直接调用Director来进行创建,不需要调用处自行创建对象,减小错误的产生几率。

    同时又实现了同一类型不同属性对象的灵活扩充。例如可以随意扩展多个个TCLComputer、ASUSComputer,来实现不同类型的Computer创建。

    --------------------

  • 相关阅读:
    SaltStack入门到精通第一篇:安装SaltStack
    saltstack 基础入门文档
    【基础】centos 6.X 下修改图形界面为命令行界面(单用户救援模式)
    成都达内推荐PHP书籍【update 2017.1.10】
    高性能Mysql主从架构的复制原理及配置详解
    MySQL数据库的初始化mysql_install_db 【基础巩固】
    linux rsync配置文件参数详解
    实时跟踪log变化的工具Apachetop
    实时观察Apache访问情况的工具Apachetop
    apachetop 实时监测web服务器运行状况
  • 原文地址:https://www.cnblogs.com/PerkinsZhu/p/5818698.html
Copyright © 2011-2022 走看看