赞
踩
建造者模式(Builder Pattern)是一种对象构建的设计模式,它允许你通过一步一步地构建一个复杂对象,来隐藏复杂对象的创建细节。
这种模式将一个复杂对象的构建过程与其表示过程分离,使得同样的构建过程可以创建不同的表示。命名建议以Builder结尾,以达到见名之意。
在建造者模式中,通常包含以下几个角色:
实现建造华为手机与小米手机
Phone.java
public class Phone { // 机身 private String fuselage; // 摄像头 private String camera; // 系统内核 private String systemKernel; // 私有构造方法,只能通过建造者创建 private Phone(Builder builder) { this.fuselage = builder.fuselage; this.camera = builder.camera; this.systemKernel = builder.systemKernel; } @Override public String toString() { return "Phone{" + "fuselage='" + fuselage + '\'' + ", camera='" + camera + '\'' + ", systemKernel='" + systemKernel + '\'' + '}'; } // 静态内部类作为建造者 static class Builder { // 机身 private String fuselage; // 摄像头 private String camera; // 系统内核 private String systemKernel; public Builder setFuselage(String fuselage) { this.fuselage = fuselage; return this; // 链式调用 } public Builder setCamera(String camera) { this.camera = camera; return this; // 链式调用 } public Builder setSystemKernel(String systemKernel) { this.systemKernel = systemKernel; return this; // 链式调用 } // 创建手机 public Phone createPhone(){ return new Phone(this); } } }
Client.java
public class Client { public static void main(String[] args) { Phone phone = new Phone.Builder() .setCamera("华为摄像头") .setFuselage("华为机身") .setSystemKernel("鸿蒙系统") .createPhone(); System.out.println(phone); Phone phone2 = new Phone.Builder() .setCamera("小米摄像头") .setFuselage("小米机身") .setSystemKernel("小米系统") .createPhone(); System.out.println(phone2); } }
执行结果:
Phone.java
public class Phone { // 机身 private String fuselage; // 摄像头 private String camera; // 系统内核 private String systemKernel; public void setFuselage(String fuselage) { this.fuselage = fuselage; } public void setCamera(String camera) { this.camera = camera; } public void setSystemKernel(String systemKernel) { this.systemKernel = systemKernel; } @Override public String toString() { return "Phone{" + "fuselage=" + fuselage + ", camera=" + camera + ", systemKernel=" + systemKernel + '}'; } }
IPhoneBuider.java
// 手机 抽象建造者定义接口
public interface IPhoneBuider {
// 设置机身
IPhoneBuider setFuselage(String fuselage);
// 设置摄像头
IPhoneBuider setCamera(String camera);
// 设置系统内核
IPhoneBuider setSystemKernel(String systemKernel);
// 返回创建对象
Phone buildPhone();
}
PhoneBuilder.java
// 建造者具体实现 public class PhoneBuilder implements IPhoneBuider { // 定义建造者返回对象 private Phone phone; public PhoneBuilder() { // 初始化Phone this.phone = new Phone(); } @Override public IPhoneBuider setFuselage(String fuselage) { phone.setFuselage(fuselage); return this; } @Override public IPhoneBuider setCamera(String camera) { phone.setCamera(camera); return this; } @Override public IPhoneBuider setSystemKernel(String systemKernel) { phone.setSystemKernel(systemKernel); return this; } @Override public Phone buildPhone() { return phone; } }
TestClient2.java
public class TestClient2 {
public static void main(String[] args) {
// 创建建造具体建造者
PhoneBuilder phoneBuilder = new PhoneBuilder();
Phone phone = phoneBuilder
.setCamera("装配小米摄像头")
.setFuselage("装配小米机身")
.setSystemKernel("装配小米系统")
.buildPhone();
System.out.println(phone.toString());
}
}
新增导演者
HuaweiDirector.java
// 华为手机导演者 public class HuaweiDirector { // 定义建造者属性 private IPhoneBuider phoneBuider; public HuaweiDirector(IPhoneBuider phoneBuider) { this.phoneBuider = phoneBuider; } public Phone createPhone(){ Phone phone = phoneBuider.setCamera("装配华为摄像头") .setFuselage("装配华为机身") .setSystemKernel("装配鸿蒙系统") .buildPhone(); return phone; } }
TestClient.java
public class TestClient {
public static void main(String[] args) {
// 创建建造具体建造者
PhoneBuilder phoneBuilder = new PhoneBuilder();
// 创建导演者 传入具体建造者
HuaweiDirector huaweiDirector = new HuaweiDirector(phoneBuilder);
// 通过导演者构建手机
Phone phone = huaweiDirector.createPhone();
System.out.println(phone.toString());
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。