从微波炉谈面向对象

微波炉功能简单,可以按食品分裂加热,可以手动控温,将来也有可能在外面添加触摸屏(如现在的洗衣机一样)。外设功能逐渐比较多,我们需要把这些杂七杂八的东西统一在一起,这样facade模式就派上用场了。

其实对于一些外设功能,我们是不是可以封装一下,这样用户说要加热,我们就do一下加热,对于要停止加热,我们也do一下stop。看到这里命令模式又派上用场了。反正的是do,对于怎样do让居然的功能去做吧。

将来用户执行一个功能,如果能告知执行的结果那就好了。比如加热鸡,如果加热好了,可以提示一下来个语音。如果是高级的微波炉能发个短信提醒一下也是超好呀!这样MVC就派上用场了。

我们刚说的高级功能的微波炉,想想她有哪些功能,她有显示屏,有语音提示,可以发短信等待。如果鸡加热好了,一方面要语音提示“呀呀!鸡好了,快来吃!”,一方面显示屏上,蹦出一只熟鸡跳呀跳,还有文字,“我是一只,熟了的鸡,呀呀,什么时候赶紧来吃!”,一方面发短信给老婆叫她回来调味(主要是我不会调味,呵呵)。一个对象发生变化,需要将这些变化通知给多个对象,那不简直就是观察着模式吗?

对于加热这一功能是有一定步骤的。比如可以简单分为加热前,加热中,加热后等若干步骤的。需要加热的东西如粥,米饭,鸡等都要遵循这个步骤的。对于一个操作,俺某些固定的步骤去执行,这不是模板模式的体现吗!

唉,刚说的对于需要加热的东西如粥,米饭,鸡等都要遵循相同的步骤,在每一步骤中有一些相同的,比如加热前开火,加热后关火等,但是还有些不同,比如煮粥的时候,火候要控制好平稳,对于加热鱼温度要小一点,而热猪手温度要适当大一点否则不好吃。我们在不改变操作的前提下,又能执行一些新的功能,这不是Visitor模式的具体体现吗!

其实对于食物加热的是个技术难题,怎样在最短的时间内加热让其内部营养元素损失最少,又要保证其口感好,当然还要环保省电。我认为这里会对不同类型的食物需要一个复杂的算法进行控制。那就用策略模式吧!

前面说了一些功能需要封装成一个对象,那怎样兴建这些对象呀,这些对象是不是可以单粒呀,如果不是单粒的,是不是有些可以利用原形进行clone来呀!这样工厂模式,单粒模式,原形模式是不是也是需要的呀!

说实话,这几年广东这么微波炉市场发展的太快了!一方面要生产面向农村的低端微波炉,一方面还要生产面向大中城市的中高端微波炉,另外对于国外欧美非常高端的市场俺们也不能放过呀!老板说三大通吃,一个都不能少,都要强,都要狠才行!面对这么多套家伙,很多抽象的功能接口都是一样的,只是有些具体的实现不一样。比如加热开火,如果低端的就开个火就行了。而高端的或许需要检测一下外围情况,如果不能开火,还要来个报警。想想国外一个老太太喝汤被汤烫伤了还赔n多钱。俺们的微波炉要是有问题了不是要给赔光了不成。不扯了。反正是一套接口,多种实现了。咣当,赶紧查了一下设计模式圣经。圣经明确写着此类情况非桥(bridge)模式不可。

好了,现在总结一下,看看设计一个破微波炉要用到那些模式:
Facade,Command,MVC,Observer,Template,Visitor,Strategy,Factory,Singleton,Prototype,Bridge

其实对一些问题如果真正理解的其内含,联系起来,还是蛮方便的!如果答不上来,有时候也需要反思一下自己,是思维上,知识上,反应上等哪些地方出问题了。最近面试,偶被多线程的问题问倒,现在想想这一块的确是我自己的软肋,项目中用多线程太少了,一些东西知道,时间长了只是有个大概印象,细节的东西忘记了!呵呵!

这种情况的面试,如果回答的好,非常能活跃气氛,拉拢面试官与应聘者的距离。其实这比群呕,做游戏的要好多了。对于这两种,我一般必死无疑,因为我根本摸不透其中的规律呀!呵呵!


这个得看项目经验了,以前跟一些老鸟在一起工作得时候深有体会,他们因为多个项目得磨练,对于系统框架得可能变化点熟得很,比如分页框架,他们一般就是用适配器模式,以利于未来引入新得分页开源框架,还有就是对xml文件得处理,对于像我这样得新手来说,看到得是接口,具体内部用得是哪个开源框架,他们也做了封装。还有就是数据源和dao,一般都是用工厂模式,以方便在各个数据库间得切换。

另外就是,项目分不同区域得版本,主要框架是一致,但是在具体业务上却大有不同,具有地方特色,那么就需要对业务层进行高度抽象,灵活使用工厂模式,门面模式,策略模式等等,这样才好方便地方实施程序员进行扩展以及代码重用。
<think>嗯,用户想让我用通俗易懂的方式解释面向对象。首先,我需要确定用户的基础。可能是一个刚开始学编程的新手,或者是对这个概念不太清楚的非技术人员。所以得用生活中的例子,避免专业术语。 面向对象的核心是和对象,这两个概念对新手来说可能比较抽象。得找个常见的比。比如用“狗”作为,具体的狗如“我的宠物狗小白”作为对象。这样用户容易联想到属性和方法,比如颜色、品种是属性,叫、跑是方法。 接下来要讲四大特性:封装、继承、多态、抽象。每个都需要简单的例子。比如手机作为封装,用户不需要知道内部电路,只用按键;继承可以用家族继承,比如孩子继承父母的特征;多态可以是同一方法不同表现,比如不同动物的叫声;抽象可能有点难,可以比喻为遥控器的按钮,不用知道内部怎么工作。 用户可能混淆和对象,或者不明白为什么需要面向对象。需要强调模块化和重用性,比如乐高积木,每个积木是一个,可以重复使用搭建不同结构。这样能帮助用户理解代码的可维护性和扩展性。 还要考虑用户可能的疑问,比如面向过程和面向对象的区别。比如做饭的例子,面向过程是步骤,面向对象是各个工具协作。这样对比更清晰。 最后,总结要简洁,用比喻加强记忆,比如把面向对象比作工厂生产线,每个环节各司其职。确保用户听完后能有一个整体的理解,而不是零散的概念。</think>这里用做菜过程理解面向对象编程: --- ### **面向对象四大特征** ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/5c3c8c3c0c0c4d4dbd5f8e1d9e7a3b3c~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=600&h=400&s=112984&e=png&b=f5f5f5) #### **1. 与对象(Class & Object)** 👉 **比喻**:菜谱和具体菜品 - 菜谱():规定宫保鸡丁需要鸡丁、花生、酱料等原料(属性) - 具体菜品(对象):根据菜谱实际做出的三盘宫保鸡丁(实例化) - 每盘菜的咸淡可能不同(对象属性差异) #### **2. 封装(Encapsulation)** 👉 **比喻**:智能电饭煲 - 内部有加热控制程序(私有方法) - 用户只需按键选择煮饭模式(公有接口) - 无需了解温度传感器如何工作(隐藏实现细节) #### **3. 继承(Inheritance)** 👉 **比喻**:连锁餐厅 - 总店制定标准菜单(父) - 分店在基础菜单上增加本地特色菜(子扩展) - 所有分店自动获得总店的招牌菜(方法继承) #### **4. 多态(Polymorphism)** 👉 **比喻**:万能充电器 - Type-C接口(统一方法名) - 给手机充电(调用手机充电方法) - 给笔记本充电(调用笔记本充电方法) - 不同设备充电逻辑不同(方法重写) --- ### **面向过程 vs 面向对象** ```mermaid graph LR A[做番茄炒蛋] --> B[面向过程] A --> C[面向对象] B -->|步骤| D[洗番茄→切块→打蛋→炒制...] C -->|协作| E[番茄对象+鸡蛋对象+锅具对象] ``` --- ### **生活中的OOP案例** #### **1. 快递系统** ```python class 快递员: def 派件(self, 包裹): print(f"配送{包裹.单号}") class 包裹: def __init__(self, 重量, 收件人): self.重量 =重量 self.收件人=收件人 顺丰小哥 = 快递员() 我的快递 = 包裹(2.5, "张三") 顺丰小哥.派件(我的快递) ``` #### **2. 自动售货机 - **商品**:价格、库存量 - **支付接口**:支持现金/扫码 - **出货机制**:检查库存→扣款→弹出商品 --- ### **新手常见误区** 1. **过度设计**:像用航天飞机零件造自行车(简单功能强行用设计模式) 2. **继承滥用**:硬说挖掘机是电饭煲的子(不合理继承关系) 3. **忽略封装**:像把微波炉电路板暴露在外(随意修改对象内部状态) --- ### **代码进化示例** #### **原始写法(面向过程)** ```python length = 5 width = 3 height = 2 volume = length * width * height ``` #### **面向对象写法** ```python class 长方体: def __init__(self, 长, 宽, 高): self.长 = 长 self.宽 = 宽 self.高 = 高 def 计算体积(self): return self.长 * self.宽 * self.高 我的箱子 = 长方体(5, 3, 2) print(我的箱子.计算体积()) ``` --- ### **开发者的收获** 1. **模块化**:像乐高积木搭建系统 2. **可维护性**:修改微波炉电路不影响使用界面 3. **复用性**:咖啡机模块可以直接用在奶茶机上 4. **扩展性**:给无人机增加送货功能不影响飞行控制 通过把现实世界的事物转化为代码中的对象,就像用数字积木搭建虚拟世界,这就是面向对象编程的魅力所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值