设计模式-建造者模式(五)

简介

将一个复杂的对象一步一步的创建,每个属性采用组装完成
产品组成部分必须相同,如电脑的组装,各个部件都是需要的
建造者模式关心的组装,工厂模式关心的是创建,两者可以结合使用
主要模块

  • 产品
  • 指挥官
  • 抽象建造者
  • 具体建造者

例子

产品

//产品是一个电脑
public class Computer {

    //cpu -->可能是一个对象,这个使用String模拟
    private String cpu;

    //内存-->可能是一个对象,这个使用String模拟
    private String memory;

    //磁盘-->可能是一个对象,这个使用String模拟
    private String disk;

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

    public void setMemory(String memory) {
        this.memory = memory;
    }

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

    @Override
    public String toString() {
        return "Computer{" +
                "cpu='" + cpu + '\'' +
                ", memory='" + memory + '\'' +
                ", disk='" + disk + '\'' +
                '}';
    }
}

指挥官

//指挥,组装电脑的人
public class Director {

    //需要一个具体建造者
    private AbstractBuilder builder;

    //构造方法
    public Director(AbstractBuilder builder) {
        this.builder = builder;
    }

    //建造对象
    public Computer construct(){
        //构造产品属性
        builder.builderCpu();
        builder.builderDisk();
        builder.builderMemory();
        return builder.getComputer();
    }
}

抽象建造者

public abstract class AbstractBuilder {

    //用收保护的对象,保证子类可以继承
    protected Computer computer = new Computer();

    //三个抽象方法
    public abstract void builderCpu();
    public abstract void builderMemory();
    public abstract void builderDisk();

    //返回对象
    public Computer getComputer(){
        return computer;
    }

}

建造者(DELL)

//戴尔建造对象
public class DellBuilder extends AbstractBuilder {

    @Override
    public void builderCpu() {
        computer.setCpu("Dell cpu 2核");
    }

    @Override
    public void builderMemory() {
        computer.setMemory("Dell 内存 4G");
    }

    @Override
    public void builderDisk() {
        computer.setDisk("Dell 磁盘 500G");
    }
}

建造者(ASUS)

public class AsusBuilder extends AbstractBuilder {

    @Override
    public void builderCpu() {
        computer.setCpu("Asus cpu 4核");
    }

    @Override
    public void builderMemory() {
        computer.setMemory("Asus 内存 8G");
    }

    @Override
    public void builderDisk() {
        computer.setDisk("Asus 磁盘 1T");
    }
}

测试

public class Main {
    public static void main(String[] args) {
        //建造者
        DellBuilder builder = new DellBuilder();
        //指挥官
        Director director = new Director(builder);
        //创建对象
        Computer computer = director.construct();

        System.out.println(computer);//Computer{cpu='Dell cpu 2核', memory='Dell 内存 4G', disk='Dell 磁盘 500G'}

        //建造者
        AsusBuilder builder1 = new AsusBuilder();
        //指挥官
        Director director1 = new Director(builder1);
        //创建对象
        Computer computer1 = director1.construct();

        System.out.println(computer1);//Computer{cpu='Asus cpu 4核', memory='Asus 内存 8G', disk='Asus 磁盘 1T'}
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值