『设计模式--创建型』建造者模式的简单理解

一、简单介绍

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 。

经典的UML类图(来自百度):

img

其中,Director被称为导向器,它用于指导具体构建者如何构建产品,控制调用先后次序,并向调用者返回完整的产品类。

注意

抽象工厂(Abstract Factory)模式与建造者(Builder)模式相似,因为它也能创建复杂对象。

主要的区别是:

  • Builder模式着重于一步步构建一个复杂对象。
  • Abstract Factory着重于多个系列的产品对象(简单的或是复杂的)。
  • Builder在最后一步返回产品。
  • 对于Abstract Factory来说,产品是立即返回的。

二、实现方法

1、传统(经典)的实现方法

public class BuildExample {
    public static void main(String[] args) {
        Director director = new Director(new RedmiBuilder());
        Phone phone = director.construct();
        System.out.println(phone);
    }
}

//--------------------------产品-------------------------
class Phone {
    private String cpu;
    private String ram;
    private String rom;
	// 省略getter、setter和toString
}

//--------------------------构建者接口-------------------------
interface Builder {
    void setCpu();
    void setRam();
    void setRom();
    Phone getPhone();
}

//--------------------------具体的构建者-------------------------
class RedmiBuilder implements Builder {
    private final Phone redmiPhone = new Phone();

    @Override
    public void setCpu() {
        redmiPhone.setCpu("8086");
    }

    @Override
    public void setRam() {
        redmiPhone.setRam("2G");
    }

    @Override
    public void setRom() {
        redmiPhone.setRom("128G");
    }

    @Override
    public Phone getPhone() {
        return redmiPhone;
    }
}

//--------------------------引导者-------------------------
class Director {
    private Builder builder = null;

    Director(Builder builder) {
        this.builder = builder;
    }

    public Phone construct() {
        builder.setCpu();
        builder.setRam();
        builder.setRom();
        return builder.getPhone();
    }
}

2、Java中的实现方式

public class BuildExample {
    public static void main(String[] args) {
        Phone phone = new Phone.Builder()
                .setCpu("8086")
                .setRam("2G")
                .setRom("128G")
                .build();
        System.out.println(phone);
    }
}

//--------------------------产品-------------------------
class Phone {
    private final String cpu;
    private final String ram;
    private final String rom;

    private Phone(Builder builder){
        this.cpu=builder.cpu;
        this.ram=builder.ram;
        this.rom=builder.rom;
    }

    public static final class Builder {
        private String cpu;
        private String ram;
        private String rom;

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

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

        public Builder setRom(String rom) {
            this.rom = rom;
            return this;
        }

        public Phone build() {
            return new Phone(this);
        }
    }
	
    // 省略toString
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值