Android设计模式之建造者模式,你真的懂吗?

概念
将一个复杂对象的构建与它的表示进行分离,使得同样的构建过程可以构建不同的表示
对于用户来讲可以不关注建造过程和细节
例如构建一台电脑,我们需要选择cpu 主板,硬盘等,然后开始组装,对于我们来讲我们需要的是一台电脑,至于怎么组装的我们不在意

建造者模式主要有几个角色
产品类:表示要创建的复杂对象,它是一个具体的类
builder抽象建造者:创建产品的抽象接口,一般至少有一个创建产品的抽象方法和返回产品的抽象方法
ConcrateBuilder实际建造者:实现builder类,实现抽象的所有方法,实现具体的建造细节。
DIrector 指挥者:分配不同的建造者来创建产品,统一组装流程。
实现
1、首先创建一个具体的产品类 computer

public class Computer {

    private String cpu;//cpu
    private String disk;//硬盘
    private String board;//主板

    public String getCpu() {
        return cpu;
    }

    public void setCpu(String cpu) {
        this.cpu = cpu;
    }

    public String getDisk() {
        return disk;
    }

    public void setDisk(String disk) {
        this.disk = disk;
    }

    public String getBoard() {
        return board;
    }

    public void setBoard(String board) {
        this.board = board;
    }
}

2、定义抽象建造者 组装的所有过程

public abstract class Builder {

    public abstract void buildCPU(String cpu);//组装CPu

    public abstract void buildDisk(String disk);//组装硬盘

    public abstract void buildBoard(String board);//组装主板

    public abstract Computer create();//返回组装好的电脑
}

3、创建实际建造者,实现具体的组装过程

public class ConcreateBuilder extends Builder {
    Computer computer = new Computer();//创建产品实例
    @Override
    public void buildCPU(String cpu) {
        computer.setCpu(cpu);
    }

    @Override
    public void buildDisk(String disk) {
        computer.setDisk(disk);
    }

    @Override
    public void buildBoard(String board) {
        computer.setBoard(board);
    }

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

4、定义指挥者类

public class Director {

    private ConcreateBuilder mBuilder = null;

    public Director(ConcreateBuilder builder){
        this.mBuilder = builder;
    }

    public  Computer build(String cpu,String disk,String board){
        if(mBuilder!=null){
            mBuilder.buildBoard(board);
            mBuilder.buildCPU(cpu);
            mBuilder.buildDisk(disk);
            mBuilder.create();
        }
        return null;
    }

}

5 测试方法,看实现结果

@Test
public void testBuilder(){
    ConcreateBuilder builder = new ConcreateBuilder();
    Director director = new Director(builder);
    Computer computer = director.build("Intel","硬盘","主板");
    System.out.println(computer);
}

你可能感兴趣的:(Android设计模式之建造者模式,你真的懂吗?)