建造者模式

介绍:
如果一个对象的创建拥有很复杂的流程,或对象内存在很多组件、属性等,使用建造者模式将这种对象的创建和使用分离。该模式可以使用固定的组件但不同的顺序去建造不同的对象,如炒一个菜韭菜鸡蛋,韭菜(组件1)和鸡蛋(组件2)是一定要放的,但放的顺序可以不同;同样组件1也可以是番茄,组件2也可以是其他东西,由具体的build类去指定,而组件的安装顺序则由执行者去指定,客户端只需要从执行者处拿到对象即可。

优点:

  • 能够创建很复杂、流程组件很多的对象。
    缺点:
  • 会产生额外的build对象,当产品内部结构发生改变时,建造者工厂需要改变。

源码举例

  1. JDK中的StringBuilder和StringBuffer
  2. guava中的immutableset和cachebuilder
  3. spring中的beanDefinitionBuilder
  4. mybatis的sqlsessionfactorybuilder

代码

public class Computer {
    private String CPU;
    private String memory;
    private String GPU;
}

public interface BuilderFactory {
     void buildCPU();
     void buildMemory();
     void buildGPU();
     Computer buildComputer();
}

public class InterBuilderFactory implements BuilderFactory{
    Computer inter = new Computer();
    @Override
    public void buildCPU() {
        inter.setCPU("安装inter CPU");
    }
    @Override
    public void buildMemory() {
        inter.setMemory("安装inter 内存条");
    }
    @Override
    public void buildGPU() {
        inter.setGPU("安装inter 显卡");
    }
    @Override
    public Computer buildComputer() {
        return inter;
    }
}

public class Actor {
    BuilderFactory factory = new InterBuilderFactory();
    public Computer getInter(){
        factory.buildMemory();
        factory.buildGPU();
        factory.buildCPU();
        return factory.buildComputer();
    }
}

public class Test {
    public static void main(String[] args) {
        Actor actor = new Actor();
        Computer computer = actor.getInter();
		//Computer{CPU='安装inter CPU', memory='安装inter 内存条', GPU='安装inter 显卡'}
        System.out.println(computer.toString());
    }
}

升级为链式调用

public class Computer {
    private String CPU;
    private String memory;
    private String GPU;

    public Computer(ComputerBuilder builder) {
        this.CPU=builder.getCPU();
        this.GPU=builder.getGPU();
        this.memory=builder.getMemory();
    }

    public Computer() {
    }
    public static class ComputerBuilder{
        private String CPU;
        private String memory;
        private String GPU;

        public ComputerBuilder buildCPU() {
            this.setCPU("安装inter CPU");
            return this;
        }

        public ComputerBuilder buildMemory() {
            this.setMemory("安装inter 内存条");
            return this;
        }

        public ComputerBuilder buildGPU() {
            this.setGPU("安装inter 显卡");
            return this;
        }

        public Computer build(){
            return new Computer(this);
        }

    }
}

public Computer getInterBuilder(){
        Computer computer = new Computer.ComputerBuilder().buildCPU().buildGPU().buildMemory().build();
        return computer;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值