《Android源码设计模式解析与实战》-构建者模式

2018-09-19  本文已影响0人  虎三呀

定义

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

主要作用

例子:
用户组装电脑 组装汽车 组装xxxx ,以及所有能构建的东西

UML类图


角色讲解:

  1. 指挥者(Director)直接和客户(Client)进行需求沟通;
  2. 沟通后指挥者将客户创建产品的需求划分为各个部件的建造请求(Builder);
  3. 将各个部件的建造请求委派到具体的建造者(ConcreteBuilder);
  4. 各个具体建造者负责进行产品部件的构建;
  5. 最终构建成具体产品(Product)。

简单案例

实例概况

//装机工程师
public abstract class Builder {
    //装主板
    public abstract void buildBoard(String mBoard) ;
    //装显示屏
    public abstract void buildDisplay(String mDisplay) ;
    //装系统
    public  abstract void buildOS();
    //产品:装好的电脑
    public  abstract Computer create();
}
//老板
public class Director {
    Builder builder ;
    
    public Director(Builder builder) {
        super();
        this.builder = builder;
    }

    /**根据客户的配置指挥装机工程师去建造*/
    public void construct(String mBoard,String mDisplay) {
        builder.buildBoard(mBoard);
        builder.buildDisplay(mDisplay);
        builder.buildOS();
    }
}
//组装的电脑
public abstract class Computer {
    protected String mBoard;
    protected String mDisplay;
    protected String mOS;

    //设置主板
    public void setBoard(String mBoard) {
        this.mBoard = mBoard;
    }
    //设置显示器
    public void setDisplay(String mDisplay) {
        this.mDisplay = mDisplay;
    }
    //设置系统
    public abstract void setOS();

    @Override
    public String toString() {
        return "Computer [mBoard=" + mBoard + ", mDisplay=" + mDisplay + ", mOS=" + mOS + "]";
    }
}

具体的装机工程师 和具体的电脑

public class MacBook extends Computer {

    @Override
    public void setOS() {
        this.mOS = "MAC OS X 10.10";
    }
}
//MAC装机工程师 系统已经内置了,只需要把主板和显示屏装一下就可以完成了
public class MacBookBuilder extends Builder {
    private Computer computer = new MacBook();
    @Override
    public void buildBoard(String mBoard) {
        computer.setBoard(mBoard);
    }

    @Override
    public void buildDisplay(String mDisplay) {
        computer.setDisplay(mDisplay);
    }

    @Override
    public void buildOS() {
        computer.setOS();
    }

    @Override
    public Computer create() {
        return computer;
    }
}

客户Zero 去电脑店买MAC电脑,并把配置说了下。主板要英特尔的,显示屏便宜点的就好。

public class Client {
    public static void main(String[] args) {
        //找到对应工程师
        Builder b = new MacBookBuilder();
        
        //跟老板说配置
        Director d = new Director(b);
        d.construct("英特尔", "山寨显示器");
        
        //电脑构建好了,并显示出来
        System.out.println(b.create().toString());
    }
}

通过上述这个常见的生活例子,我相信你已经完全明白了建造者模式的原理了!!

优缺点

优点:

缺点:

上一篇 下一篇

猜你喜欢

热点阅读