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

  • 相关阅读:
    Android 2.2 r1 API 中文文档系列(11) —— RadioButton
    Android API 中文 (15) —— GridView
    Android 中文 API (16) —— AnalogClock
    Android2.2 API 中文文档系列(7) —— ImageButton
    Android2.2 API 中文文档系列(6) —— ImageView
    Android 2.2 r1 API 中文文档系列(12) —— Button
    Android2.2 API 中文文档系列(8) —— QuickContactBadge
    [Android1.5]TextView跑马灯效果
    [Android1.5]ActivityManager: [1] Killed am start n
    Android API 中文(14) —— ViewStub
  • 原文地址:https://www.cnblogs.com/zhangkeyu/p/6663864.html
Copyright © 2011-2022 走看看