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创建。

  • 相关阅读:
    rails 相关文件
    linux学习---vi进行多行的copy,cut
    设计
    互联网---现在正在变成过去
    testing
    TTl
    如何成为优秀的性能测试工程师
    linuX学习
    Programiz 中文系列教程·翻译完成
    Programiz C 语言教程·翻译完成
  • 原文地址:https://www.cnblogs.com/zhangkeyu/p/6663864.html
Copyright © 2011-2022 走看看