顾客进入餐厅,告诉服务员,来一份西红柿鸡蛋。然后等着吃就行了。

顾客根本不需要知道做一份西红柿炒鸡蛋的过程。

厨师在后面咔咔捣鼓,饭就做好了。

我们来看看后厨都干了些什么吧!

后厨的厨师会做100道菜:佛跳桥,蚂蚁上树,麻婆豆腐等等等;但是老板说今日餐厅提供的菜品有:西红柿炒鸡蛋,辣椒炒牛肉。厨师只能做这两道菜:西红柿炒鸡蛋,辣椒炒牛肉。

前台告诉厨师搞一份西红柿炒鸡蛋,厨师刚好会,直接开火烧油,咔咔操作。

建造者模式就是这个效果,客户进入餐厅,只需要下单他想吃的菜(必须菜单上有),就可以吃到了。其他的事情完全不需要操心。

企业使用建造者模式封装某个技术(比如查询工具包),后入职的程序员只需要调用提供的方法(根据Id查询、根据年龄查询、分页查询),就可以实现自己想要的查询效果。一点都不需要操心其方法是如何实现的。

那么代码是如何实现这种效果呢,下面会给一个案例,通过此案例,希望你学会解构公司代码设计,甚至学会自己封装一套。

  1. 老板说今天餐厅只卖 西红柿炒鸡蛋,辣椒炒牛肉两个菜品
/*** 辣椒炒牛肉*/
@Data
public class CapsicumBeef {/*** 牛肉*/private String beef;/*** 辣椒*/private String capsicum;
}
/*** 西红柿炒鸡蛋*/
@Data
public class TomatoEggs {/*** 西红柿*/private String tomato;/*** 鸡蛋*/private String egg;}
  1. 制定菜单
/*** 老板对厨房要求的菜单*/
@Data
public class Menu {// 番茄炒蛋public TomatoEggs tomatoEggs;// 辣椒炒牛肉public CapsicumBeef capsicumBeef;}
  1. 厨房能完成的菜品
/*** 厨房对前台提供的菜单*/
public interface Builder {/*** 获取菜单*/Menu getMenu();/*** 构建西红柿鸡蛋汤* @param tomatoEggs* @return*/Builder buildTomatoEggs(TomatoEggs tomatoEggs);/*** 构建辣椒炒牛肉* @param capsicumBeef* @return*/Builder buildCapsicumBeef(CapsicumBeef capsicumBeef);
}
  1. 厨师Ove准备预制菜
/*** 厨师Ove做辣椒炒牛肉和西红柿鸡蛋*/
public class Ove implements Builder {Menu menu = new Menu();@Overridepublic Menu getMenu() {return menu;}@Overridepublic Builder buildTomatoEggs(TomatoEggs tomatoEggs) {menu.setTomatoEggs(tomatoEggs);return this;}@Overridepublic Builder buildCapsicumBeef(CapsicumBeef capsicumBeef) {menu.setCapsicumBeef(capsicumBeef);return this;}
}
  1. 前台准备好给客户的菜单
/*** 前台*/
public class Director {// 调用厨师Builder builder = new Ove();// 厨师开始做西红柿炒蛋Menu creatTomatoEggs(TomatoEggs tomatoeggs){tomatoeggs.setTomato("西红柿");tomatoeggs.setEgg("鸡蛋");builder.buildTomatoEggs(tomatoeggs);return builder.getMenu();}// 厨师开始做西红柿炒蛋Menu creatcCapsicumBeef(CapsicumBeef capsicumBeef){capsicumBeef.setCapsicum("朝天椒");capsicumBeef.setBeef("牛后腿肉");builder.buildCapsicumBeef(capsicumBeef);return builder.getMenu();}}
  1. 客户下单
/*** 顾客John下单*/
public class Consumer {public static void main(String[] args) {// 召唤前台工作人员Director director = new Director();// 点一份西红柿鸡蛋TomatoEggs tomEggs = new TomatoEggs();// 前台下单Menu menu = director.creatTomatoEggs(tomEggs);System.out.println(menu);}
}

打印结果:Menu{tomatoEggs=TomatoEggs{tomato='西红柿', egg='2个鸡蛋'}, capsicumBeef=null}

/*** 顾客Jay下单*/
public class Consumer {public static void main(String[] args) {// 召唤前台工作人员Director director = new Director();// 点辣椒炒肉CapsicumBeef capsicumBeef = new CapsicumBeef();// 前台下单Menu menu = director.creatcCapsicumBeef(capsicumBeef);System.out.println(menu);}
}

打印Menu{tomatoEggs=null, capsicumBeef=CapsicumBeef{beef='牛后腿肉', capsicum='朝天椒'}}

实际上你可以发现,想要那个菜,就调用哪个接口,这就是这个项目设计后暴露出来的接口,最普通的程序员仅仅需要调用这些接口,就可以完成基础开发了。而你,我的朋友,已经会设计程序了。这就是架构师的工作内容:面对一个业务场景,考虑设计出最好的方案,保证后续开发的便捷性,可维护性等等。

如果你的代码工作是,独立承担一个完全新的需求开发,之前项目中从没有相关的代码实现,那么就可以考虑使用设计模式等等思想。如果你知识在原有项目上拓展小功能,项目结构你是无法变动的,就老实写吧。后面有时间了考虑代码重构。

最暴力的开发方式就是:活生生的new一大堆,然后简单的调用,一点点设计的思想都没有,刚开始看似完成了功能,后面拓展后代码量一多,代码就不忍直视了。

设计模式---建造者模式(一个案例带你理解架构师如何使用建造者模式思想)相关推荐

  1. 【架构师李肯】带你走进架构师的一天

    作者简介 架构师李肯(全网同名),一个专注于嵌入式IoT领域的架构师.有着近10年的嵌入式一线开发经验,深耕IoT领域多年,熟知IoT领域的业务发展,深度掌握IoT领域的相关技术栈,包括但不限于主流R ...

  2. 九妹带你走向 架构师

    迈向系统架构师 编者按:系统架构师是许多程序员的梦想职业.今天的你也许已经掌握了各种开发工具,并且能够使用各种平台进行开发,但作为一个架构师的要求,也许还有很长的道路.邢波涛先生在LAMP架构上的造诣 ...

  3. 第一百三十七期:一个简单的小案例带你理解MySQL中的事务

    事务又叫做TCL,全称是transaction control language,意思是事务控制语言. 作者:Java的架构师技术栈 事务又叫做TCL,全称是transaction control l ...

  4. 【Vue】一个案例带你搞懂methods、watch及computed的使用规则

    本文我们通过案例来介绍一下vue中 watch 和 computed 的使用规则,案例效果如下: 以上案例就是实现一个简单的 名称拼接处理.实现的方式有很多,本文我们将采用以下三种方式来实现. 1.D ...

  5. 一个案例带你了解独立式键盘设计原理

    单片机与4个独立按键S1~S4以及8只LED指示灯构成一个独立式键盘系统.4个按键接在P1.0~P1.3引脚,P3口接8只LED指示灯,控制8只LED指示灯的亮和灭,原理图如下.当按下S1按键时,P3 ...

  6. java设计模式7,一看就懂,架构灵魂,工厂方法模式

    目录 一.工厂模式 二.工厂方法模式的优缺点 1.优点 2.缺点 三.模拟场景 四.违背原则方案 1.思路清晰,简单明了 2.但是,似乎违反了一些设计原则: 五.通过工厂方法模式重构代码 1.定义购买 ...

  7. 飞桨PaddlePaddle-百度架构师手把手带你零基础实践深度学习——21日学习总结

    飞桨PaddlePaddle-百度架构师手把手带你零基础实践深度学习--21日学习总结 写在前面的话 纯新手小白,第一次接触深度学习方面的应用.感谢飞桨提供的这次学习机会.之前有学习到深度学习的理论方 ...

  8. 一个架构师的价值在于,他不仅能看到系统的美,而且能够在建造系统的时候能够把这些美创造出来...

    一 每个好架构师都是一位出色的程序员(卓越的程序员) 架构师,听起来是如此神秘的一个称号.尤其是在开发领域刚入门不久的菜鸟级程序员眼中,架构师都是高手,都是牛人,都是如此高高在上的存在. 不过,在搞了 ...

  9. 3.1 计算机视觉的发展和卷积神经网络概要(百度架构师手把手带你零基础实践深度学习原版笔记系列)

    3.1 计算机视觉的发展和卷积神经网络(百度架构师手把手带你零基础实践深度学习原版笔记系列) 概要 计算机视觉作为一门让机器学会如何去"看"的科学学科,具体的说,就是让机器去识别摄 ...

  10. 【郭东白架构课 开篇词】开篇词|没有战略意图,就成不了一个顶尖的架构师

    你好,我是郭东白,是一个做了 15 年架构师和 6 年 CTO 的人. 我先简单介绍一下自己.我从布朗大学(Brown University)获得博士学位后,在美国甲骨文.微软和亚马逊陆续工作了 15 ...

最新文章

  1. 浅谈ASP.net中的DataSet对象
  2. Ubuntu 之 atom 安装以及 常用配置
  3. 从Proxy到Vue3数据绑定
  4. java 重载 不可_深入深刻深到不能再深的理解java中的重载和重写
  5. 前端学习(3159):react-hello-react之一个简单的helloworld
  6. win10,配置环境变量时系统环境变量和用户环境变量的优先级
  7. win10升级后chrome碰到对话框就卡死
  8. 剩余 大小 查看内存_JVM的内存分配策略以及进入分代的条件
  9. ShowWindowAsync系统方法cmdShow参数值含义
  10. 计算机系统配置有哪些,查看电脑配置方法有哪些
  11. WebApp那些事——(JqueryMobile) 实战(一)
  12. linux vi 替换字符串,Linux vi编辑器如何查找与替换关键字
  13. TCPIP调试助手及源代码
  14. 2021年下半年信息系统监理师下午真题及答案解析
  15. codeforces上的名字颜色和codeforces打比赛转载
  16. Python | 用Python画个美队盾牌送给你
  17. linux统计单拷贝基因家族,为什么要进行基因家族分析?
  18. CSDN发博客上传照片失败问题解决方案
  19. 【go-zero】go-zero开发环境 如何聚合所有api? caddy反向代理服务分发 微服务设计api聚合方法 best practice
  20. pcs增加mysql资源_pcs命令配置示例

热门文章

  1. uwb人员定位系统:人员轨迹实时定位
  2. 干货分享 | 手把手教你做“蛋白纯化”
  3. c语言语法限制不太严格 程序设计自由度大,C语言语法限制不太严格,程序设计自由度大...
  4. 特征图注意力_探秘计算机视觉中的注意力机制
  5. Android静态资源使用建议-图片篇
  6. Android 开发数字不足位数前面补0
  7. mysql 每个月的月底_即使mysql表中不存在月份,也要选择每个月
  8. java程序设计阶段性总结_JAVA作业第一阶段性总结
  9. 有36辆自动赛车和6条跑道,没有计时器的前提下,最少用几次比赛可以筛选出最快的三辆赛车?----腾讯2016研发工程师在线模拟笔试题
  10. 6785. 2020.08.07【NOI2020】模拟T3 重映射