JAVA设计模式——(十一)建造者模式(Builder Pattern)
JAVA设计模式——(十一)建造者模式(Builder Pattern)
- 介绍
- 理解
- 实现
- Phone类
- 具体手机类
- 建造者
- 测试
- 应用
介绍
建造者模式用于将对象的创建和表示进行分离,即对象创建的过程单独提取出来,作为建造者的职能,使得同样的构建过程可以创建不同的表示。
理解
这么一读,是不是觉得建造者模式就是一条流水线似的。我们可以对比成一栋房子的建设,房子需要建造每一层,不管什么类型的房子,别墅、平层还是木头房子都是一层一层盖的,所以可以抽取整个建设过程的框架,而细节在由具体的建造者决定。
实现
Phone类
抽象类,用于提取框架。
package cn.sh.designepattern.example01;/*** @Author song* @Version 0.0.1* @Date 2025/5/5 18:11* @Contact 643947568@qq.com*/
public abstract class Phone {private String cpu;private String network;private String battery;// ...public String getBattery() {return battery;}public void setBattery(String battery) {this.battery = battery;}public String getCpu() {return cpu;}public void setCpu(String cpu) {this.cpu = cpu;}public String getNetwork() {return network;}public void setNetwork(String network) {this.network = network;}@Overridepublic String toString() {return "Phone{" +"battery='" + battery + '\'' +", cpu='" + cpu + '\'' +", network='" + network + '\'' +'}';}
}
具体手机类
package cn.sh.designepattern.example01;/*** @Author song* @Version 0.0.1* @Date 2025/5/5 18:14* @Contact 643947568@qq.com*/
public class Android extends Phone{private String os;public String getOs() {return os;}public void setOs(String os) {this.os = os;}@Overridepublic String toString() {return "Android{" +"os='" + os + '\'' +"} " + super.toString();}
}
package cn.sh.designepattern.example01;/*** @Author song* @Version 0.0.1* @Date 2025/5/5 18:15* @Contact 643947568@qq.com*/
public class Apple extends Phone{private String os;public String getOs() {return os;}public void setOs(String os) {this.os = os;}@Overridepublic String toString() {return "Apple{" +"os='" + os + '\'' +"} " + super.toString();}
}
建造者
package cn.sh.designepattern.example01;/*** @Author song* @Version 0.0.1* @Date 2025/5/5 18:16* @Contact 643947568@qq.com*/
public interface PhoneBuilder {void buildCpu();void buildOs();void buildNetwork();void buildBattery();Phone getPhone();}
具体建造者:
package cn.sh.designepattern.example01;/*** @Author song* @Version 0.0.1* @Date 2025/5/5 18:17* @Contact 643947568@qq.com*/
public class AndroidBuilder implements PhoneBuilder {private Android android = new Android();@Overridepublic void buildCpu() {android.setCpu("骁龙8888");}@Overridepublic void buildOs() {android.setOs("安卓100");}@Overridepublic void buildNetwork() {android.setNetwork("双卡双待");}@Overridepublic void buildBattery() {android.setBattery("10000mAh");}@Overridepublic Phone getPhone() {return android;}
}
package cn.sh.designepattern.example01;/*** @Author song* @Version 0.0.1* @Date 2025/5/5 18:17* @Contact 643947568@qq.com*/
public class AppleBuilder implements PhoneBuilder {private Apple apple = new Apple();@Overridepublic void buildCpu() {apple.setCpu("苹果处理器");}@Overridepublic void buildOs() {apple.setOs("苹果系统");}@Overridepublic void buildNetwork() {apple.setNetwork("双卡双待");}@Overridepublic void buildBattery() {apple.setBattery("10000mAh");}@Overridepublic Phone getPhone() {return apple;}
}
测试
package cn.sh.designepattern.example01;/*** @Author song* @Version 0.0.1* @Date 2025/5/5 18:21* @Contact 643947568@qq.com*/
public class Main {public static void main(String[] args) {PhoneBuilder androidBuilder = new AndroidBuilder();androidBuilder.buildBattery();androidBuilder.buildNetwork();androidBuilder.buildCpu();androidBuilder.buildOs();System.out.println(androidBuilder.getPhone());PhoneBuilder appleBuilder = new AppleBuilder();appleBuilder.buildBattery();appleBuilder.buildNetwork();appleBuilder.buildCpu();appleBuilder.buildOs();System.out.println(appleBuilder.getPhone());}
}
应用
可以再关注细节和流程的系统中使用,提取系统框架,封装构建过程等等。