设计模式笔记--建造者模式

建造者模式是一种设计模式,它将对象的构建与表示分离,使得创建不同表示的复杂对象变得简单。适用于对象有多个属性且部分属性可选的情况。在Java中,可以使用Lombok的@Builder注解简化代码,或者手动实现Builder类来控制对象构建。通过Builder类,可以按需设置对象属性并调用build()方法完成对象创建。

建造者模式

建造者模式就时将对象的创建和对象的属性分开。也可以算又套了一层。

介绍

将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。(大多数都看不懂,使用场景和方式见下方。)

使用场景

一个对象有多个属性(一般大于四个),创建时需要填写一些必选项和一些可选项。

使用

Java使用由两种方式,如果使用Lombok插件的话在类图上添加@Builder注解即可。缺点是不能限制必须设置某些属性。代码如下:

@Builder
public class Computer {
    private String cpu;
    private String ram;
    private int usbCount;
    private String keyboard;
    private String display;
}
//使用方式如下:
class Test{
	public static void main(String[] args) {
	    //可以设置任意数量的属性值
        Computer computer = Computer.builder()
                .cpu("cpu")
                .display("display")
                .build();

    }
}

如不使用Lombok自己手写,代码如下:
来自:秒懂设计模式之建造者模式

public class Computer {
    private final String cpu;//必须
    private final String ram;//必须
    private final int usbCount;//可选
    private final String keyboard;//可选
    private final String display;//可选

    private Computer(Builder builder){
        this.cpu=builder.cpu;
        this.ram=builder.ram;
        this.usbCount=builder.usbCount;
        this.keyboard=builder.keyboard;
        this.display=builder.display;
    }
    //省略getter
    ...
    public static class Builder{
        private String cpu;//必须
        private String ram;//必须
        private int usbCount;//可选
        private String keyboard;//可选
        private String display;//可选
       
        public Builder(String cup,String ram){
            this.cpu=cup;
            this.ram=ram;
        }

        public Builder setUsbCount(int usbCount) {
            this.usbCount = usbCount;
            return this;
        }
        public Builder setKeyboard(String keyboard) {
            this.keyboard = keyboard;
            return this;
        }
        public Builder setDisplay(String display) {
            this.display = display;
            return this;
        }        
        public Computer build(){
            return new Computer(this);
        }
    }
}
//创建
Computer computer=new Computer.Builder("因特尔","三星")
        .setDisplay("三星24寸")
        .setKeyboard("罗技")
        .setUsbCount(2)
        .build();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值