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

设计模式之构建者模式

构建者模式(Builder)

定义

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

使用场景

主要角色

  1. 产品 Product
  2. 建造者接口 Builder
  3. 具体的建造者 Concrete Builder
  4. 指挥者 Director:组织构建过程

示例代码

@Data
public class Computer {private String cpu;//必须private String ram;//必须private int usbCount;//可选private String keyboard;//可选private String display;//可选public Computer(String cpu, String ram) {this.cpu = cpu;this.ram = ram;}}
public abstract class ComputerBuilder {public abstract void setUsbCount();public abstract void setKeyboard();public abstract void setDisplay();public abstract Computer build();
}
public class LenovoComputerBuilder extends ComputerBuilder {private Computer computer;public LenovoComputerBuilder(String cpu, String ram) {computer=new Computer(cpu,ram);}@Overridepublic void setUsbCount() {computer.setUsbCount(4);}@Overridepublic void setKeyboard() {computer.setKeyboard("联想键盘");}@Overridepublic void setDisplay() {computer.setDisplay("联想显示器");}@Overridepublic Computer build() {return computer;}
}
public class MacComputerBuilder extends ComputerBuilder {private Computer computer;public MacComputerBuilder(String cpu, String ram) {computer = new Computer(cpu, ram);}@Overridepublic void setUsbCount() {computer.setUsbCount(2);}@Overridepublic void setKeyboard() {computer.setKeyboard("苹果键盘");}@Overridepublic void setDisplay() {computer.setDisplay("苹果显示器");}@Overridepublic Computer build() {return computer;}
}
public class ComputerDirector {public void makeComputer(ComputerBuilder builder){builder.setUsbCount();builder.setDisplay();builder.setKeyboard();}
}
public class Client {public static void main(String[] args) {ComputerDirector director = new ComputerDirector();ComputerBuilder builder = new MacComputerBuilder("I5处理器", "三星125");director.makeComputer(builder);Computer macComputer = builder.build();System.out.println("mac computer:" + macComputer.toString());ComputerBuilder lenovoBuilder = new LenovoComputerBuilder("I7处理器", "海力士222");director.makeComputer(lenovoBuilder);Computer lenovoComputer = lenovoBuilder.build();System.out.println("lenovo computer:" + lenovoComputer.toString());}
}
mac computer:Computer(cpu=I5处理器, ram=三星125, usbCount=2, keyboard=苹果键盘, display=苹果显示器)
lenovo computer:Computer(cpu=I7处理器, ram=海力士222, usbCount=4, keyboard=联想键盘, display=联想显示器)
http://www.lryc.cn/news/313667.html

相关文章:

  • 【PCIe 链路训练】之均衡(equalization)
  • P1059 [NOIP2006 普及组] 明明的随机数
  • 【每日一问】Cookie、Session 和 Token 有什么区别?
  • 智能合约语言(eDSL)—— proc_macro实现合约init函数
  • 如何使用 ArcGIS Pro 制作三维地形图
  • 服务器配置禁止IP直接访问,只允许域名访问
  • #14vue3生成表单并跳转到外部地址的方式
  • 航测管家:智能化革新航测作业流程
  • XXE-XML实体注入漏洞
  • 数据结构从入门到精通——栈
  • webhook详解
  • 用 ChatGPT 帮自己修英文简历 — UI/UX 设计师篇
  • 2402. 2-SAT 问题(tarjan,2-SAT模板题)
  • 基于java+springboot+vue实现的宠物健康咨询系统(文末源码+Lw)23-206
  • 品牌如何玩转饥饿营销?媒介盒子分享
  • Vue3:ref和reactive实现响应式数据
  • 二维码门楼牌管理系统应用场景:商业与零售业发展的助推器
  • 【Linux进阶之路】网络 —— “?“ (下)
  • 【AIGC】Stable Diffusion的建模思想、训练预测方式快速
  • JVM(类加载机制)
  • C++ 实战项目之 Boost 搜索引擎
  • 部署LVS+Keepalived高可用群集(抢占模式,非抢占模式,延迟模式)
  • 性别和年龄的视频实时监测项目
  • 【Spring面试题】
  • 打车代驾小程序开发 醉酒不用怕一键找代驾
  • 蓝桥集训之统计子矩阵
  • 架构师十项全能 你会几个?
  • 数据库(mysql)-新手笔记(主外键,视图)
  • 西门子PLC的交互界面怎样设计?
  • 备份 ChatGPT 的聊天纪录