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

it2023-02-19  69

一、简单介绍

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

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

其中,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)