设计模式:04-构建者模式

一。适用场景:构造比较复杂的对象。这种场景需要两个类:一个类是原始类,另一个是构建者类,用于构建原始类的对象。比如,一个Computer类,一个ComputerBuilder类,用于构建Computer类对象。
二。常用的两种方式:
1。原始类和构建者类为独立的类。
2。构建者类为原始类的内部静态类。
三。第二种方式的常用写法
例如Computer类,该类有2个属性cpu和memory,首先按照通常的方法定义该类,示例代码如下:
package cn.edu.tju.app;

public class Computer {
private String cpu;
private String memory;

public String getCpu() {
    return cpu;
}

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

public String getMemory() {
    return memory;
}

public void setMemory(String memory) {
    this.memory = memory;
}
public ComputerBuilder builder(){
    return new ComputerBuilder();
}

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

}
然后在该类内部增加内部静态类,示例代码如下:

static class ComputerBuilder{
        private Computer computer=new Computer();
        public ComputerBuilder buildCpu(String cpuInfo){
            computer.setCpu(cpuInfo);
            return this;
        }
        public ComputerBuilder buildMemory(String memoryInfo){
            computer.setMemory(memoryInfo);
            return this;
        }
        public Computer build(){
            return computer;
        }
    }

该内部静态类有一个private 的Computer对象,然后提供相应的public 方法,用来构建Computer类对象的各个部分,最后通过build()方法可返回其持有的Computer类对象。
使用示例如下:

package cn.edu.tju.app;

public class BuilderTest {
    public static void main(String[] args) {
        Computer computer=new Computer().builder()
                .buildCpu("intel i7")
                .buildMemory("16 G")
                .build();
        System.out.println(computer);
    }
}

然后需要在Computer类中定义一个public 的方法,用于返回构建者类对象:

    public ComputerBuilder builder(){
        return new ComputerBuilder();
    }

使用的时候,首先构建者内部通过builder()方法返回静态类对象,

new Computer().builder()

接下来分别调用构建者类的public 方法,分别构建Computer类对象的各个部分,最后调用build()方法返回所构建的对象,就可以使用所返回的对象了。
Computer类的完整定义如下:

package cn.edu.tju.app;

public class Computer {
    private String cpu;
    private String memory;

    public String getCpu() {
        return cpu;
    }

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

    public String getMemory() {
        return memory;
    }

    public void setMemory(String memory) {
        this.memory = memory;
    }
    public ComputerBuilder builder(){
        return new ComputerBuilder();
    }

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

    static class ComputerBuilder{
        private Computer computer=new Computer();
        public ComputerBuilder buildCpu(String cpuInfo){
            computer.setCpu(cpuInfo);
            return this;
        }
        public ComputerBuilder buildMemory(String memoryInfo){
            computer.setMemory(memoryInfo);
            return this;
        }
        public Computer build(){
            return computer;
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值