JAVA设计模式-入门版学习攻略-建造者模式

描述

将一个复杂的构建与其表示相分离,使同样的构造过程可以创建不同的表示

关键点

  • 具体产品:表示被构造的复杂对象
  • 抽象构建产品:为创建一个产品对象的各个不见指定抽象接口。
  • 抽象构建的具体实现: 实现builder的接口构造和装配该产品的对象
  • 构建者:构建一个使用Builder接口的对象

优点

  1. 易于解耦
  2. 易于精确控制对象的创建
  3. 易于拓展

缺点

需要较多共性,如果差异大就不适合

使用场景

  1. 需要生成的产品对象有复杂的内部结构,这些产品对象具备共性。
  2. 隔离复杂对象的创建和使用

代码实现

  1. 具体产品

//具体产品
public class Phone {
    //cpu
    private String cpu;
    //摄像头
    private String camera;
    //屏幕
    private String screen;

    public String getCpu() {
        return cpu;
    }

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

    public String getCamera() {
        return camera;
    }

    public void setCamera(String camera) {
        this.camera = camera;
    }

    public String getScreen() {
        return screen;
    }

    public void setScreen(String screen) {
        this.screen = screen;
    }

    @Override
    public String toString() {
        return "Phone{" +
                "cpu='" + cpu + '\'' +
                ", camera='" + camera + '\'' +
                ", screen='" + screen + '\'' +
                '}';
    }
}
  1. 抽象构建产品
//抽象构造类
public interface Builder {

    //构建手机CPU
    public void buildCpu();
    //手机摄像头
    public void buildCamera();
    //手机屏幕
    public void buildScreen();
    //构建 产品
    public Phone buildPhone();
}
  1. 抽象构建的具体实现

//抽象构造的具体实现
public class BuildPhone implements Builder {

    private Phone p = new Phone();
    public void buildCpu() {
        p.setCpu("晓龙");
    }

    public void buildCamera() {
        p.setCamera("三星");
    }

    public void buildScreen() {
        p.setScreen("京东方");
    }

    public Phone buildPhone() {
        return p;
    }
}
  1. 构建者
//构建着
public class Director {

    public static Phone constructorPhone(Builder b){
        b.buildCpu();
        b.buildCamera();
        b.buildScreen();
        return b.buildPhone();
    }
}
  1. 测试方法
public class TestBuilder {
    public static void main(String[] args) {

        Phone p = Director.constructorPhone(new BuildPhone());
        System.out.println(p);

    }
}

你可能感兴趣的:(JAVA设计模式-入门版学习攻略-建造者模式)