前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式(八)——轻松学习建造者模式

设计模式(八)——轻松学习建造者模式

作者头像
小森啦啦啦
发布2019-09-10 14:59:38
2840
发布2019-09-10 14:59:38
举报
文章被收录于专栏:IT笔记分享IT笔记分享

将一个复杂构建与他的表示分离,使得同样的构建可以创建不同的表示。

优点
  • 封装性:客户端不必知道产品内部组成的细节。
  • 建造者独立,容易扩展。例子中,惠普和苹果建造者互相独立。
  • 便于控制细节风险。

应用场景

  • 需要生成的产品对象有复杂的内部结构,这些产品对象具备共性。
  • 隔离复杂对象的创建和使用,并使得形同的创建过程可以创建不同的产品。
  • 相同方法,不同的执行顺序。

代码

GitHUb

新建一个产品类

代码语言:javascript
复制
public class Computer {

    private String CPU;

    private String capacity;

    private String ram;

    private String system;

    public String getCPU() {
        return CPU;
    }

    public void setCPU(String CPU) {
        this.CPU = CPU;
    }

    public String getCapacity() {
        return capacity;
    }

    public void setCapacity(String capacity) {
        this.capacity = capacity;
    }

    public String getRam() {
        return ram;
    }

    public void setRam(String ram) {
        this.ram = ram;
    }

    public String getSystem() {
        return system;
    }

    public void setSystem(String system) {
        this.system = system;
    }

    @Override
    public String toString() {
        return "Computer{" +
                "CPU='" + CPU + '\'' +
                ", capacity='" + capacity + '\'' +
                ", ram='" + ram + '\'' +
                ", system='" + system + '\'' +
                '}';
    }
}

建造者接口:

代码语言:javascript
复制
public interface IBuildComputer {
    void buildCPU();

    void buildCapacity();

    void buildRam();

    void buildSystem();

    Computer createComputer();
}

具体建造者:

代码语言:javascript
复制
public class HPComputer implements IBuildComputer {
    private Computer computer;

    public HPComputer(){
        computer = new Computer();
    }

    @Override
    public void buildCPU() {
        computer.setCPU("惠普cpu");
    }

    @Override
    public void buildCapacity() {
        computer.setCapacity("560G");
    }

    @Override
    public void buildRam() {
        computer.setRam("16G");
    }

    @Override
    public void buildSystem() {
        computer.setSystem("windows10");
    }

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



public class AppleComputer implements IBuildComputer {
    private Computer computer;

    public AppleComputer(){
        computer = new Computer();
    }

    @Override
    public void buildCPU() {
        computer.setCPU("苹果cpu");
    }

    @Override
    public void buildCapacity() {
        computer.setCapacity("256G");
    }

    @Override
    public void buildRam() {
        computer.setRam("16G");
    }

    @Override
    public void buildSystem() {
        computer.setSystem("macOS");
    }

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

Director导演类,负责安排已有模块顺序:

代码语言:javascript
复制
public class Director {

    public Computer createComputerByDirector(IBuildComputer computer){
        computer.buildCapacity();
        computer.buildCPU();
        computer.buildRam();
        computer.buildSystem();
        return computer.createComputer();
    }
}

测试

代码语言:javascript
复制
public class Main {
    public static void main(String[] args){

        Director director = new Director();
        Computer hp = director.createComputerByDirector(new HPComputer());
        System.out.println(hp.toString());
        System.out.println("-----------------------");
        Computer apple = director.createComputerByDirector(new AppleComputer());
        System.out.println(apple.toString());
    }
}

结果

代码语言:javascript
复制
Computer{CPU='惠普cpu', capacity='560G', ram='16G', system='windows10'}
-----------------------
Computer{CPU='苹果cpu', capacity='256G', ram='16G', system='macOS'}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT笔记分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 优点
  • 应用场景
  • 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档