当前位置: 首页 > news >正文

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());}
}

应用

可以再关注细节和流程的系统中使用,提取系统框架,封装构建过程等等。

相关文章:

  • 计算机视觉与深度学习 | 图像匹配算法综述
  • 【AI论文】像素修补师(PixelHacker):具有结构和语义一致性的图像修复(Image Inpainting)
  • Redis数据结构ZipList,QuickList,SkipList
  • linux、window安装部署nacos
  • MinIO实现https访问
  • 全局过滤器与局部过滤器: Vue中的文本格式化工具
  • Linux中web服务器的部署及优化
  • 网络安全自动化:找准边界才能筑牢安全防线
  • 2024年408真题及答案
  • 学习路线(机器人软件架构)
  • Linux的web服务器的部署及优化
  • 在 Win10 上如何安装 WSL 2 ?
  • Serverless
  • 网狐飞云娱乐三端源码深度实测:组件结构拆解与部署Bug复盘指南(附代码分析)
  • 告别散乱的 @ExceptionHandler:实现统一、可维护的 Spring Boot 错误处理
  • 字符串匹配 之 拓展 KMP算法(Z算法)
  • 如何选择合适的光源?
  • 【阿里云大模型高级工程师ACP学习笔记】2.9 大模型应用生产实践 (下篇)
  • Python异步编程进阶:深入探索asyncio高级特性
  • 在Ubuntu系统中安装桌面环境
  • “五一”假期银联、网联共处理支付交易234.39亿笔
  • 上海模速空间“北斗七星”与“群星”生态布局,正在做些什么?
  • 山大齐鲁医院通报“子宫肌瘤论文现男性患者”:存在学术不端
  • 新华社:让历史照鉴未来
  • 贵州游船侧翻248名消防员已在搜救
  • 辽宁召开假期安全生产工作调度会:绝不允许层层失守,绝不允许“带病运行”