面向对象设计之微波炉与冰箱的故事

news/2025/2/21 21:29:03/

面向对象设计之微波炉与冰箱的故事

这些天看到一贴子,地址如下:

http://topic.csdn.net/u/20091125/14/99c028d1-6cf0-4f82-b852-b94b84c4fb45.html

大概说的是:

[Quote=引用楼主 x_wy46 的回复:]
代码题(用oop的思想编码,注意代码规范)

用java写一个微波炉,注意物品正加热时不能开门,带皮带壳食物不能被加热。

用Java写一个冰箱,注意家用冰箱多数分为冷冻柜和冷藏柜两个柜(冰箱随机)

如题,就是要用面向对象的方式写代码,我怎么看不出来怎么写,

比如第二题,我一个接口然后具体类实现接口完事,结果被鄙视,无情鄙视啊

这是某某的面试题,大家各抒己见!!!
[/Quote]

 

以下是我的思考,记录下来,有兴趣可以在此加以回复讨论

 

这道题的目的是考面向对象,想要考察面试人员的考点我觉得:1、通过封装尽量降低解耦,2、提高可扩展性及可维护性。
所以观察题意,本人觉得先找变化点,再对其进行封装。
微波炉的例子变化点有两个,即:
微波炉的状态和微波炉中可加热的食物的判定:
先说微波炉的状态:微波炉的状态应该用状态模式,将开门、关门、加热封装成三种状态,如果以后有了新状态,如:强加热、中加热、弱加热等,可直接添加状态类而无需改动原代码。
再说微波炉中可加热的食物的判定:加热的食物可能会和加热状态耦合,之后为考题加难度可能会使不同加热方式可放入不同种类的食物等方面。此时,变化点比较复杂,所以食物不一定只有带不带壳,可能还有其他分法,为了解耦,可将不同的类的食物及不同类型加热方式封装在策略模式中。
此时,如果加入新的加热状态则只需要加入一个状态类和一个此状态的策略类。
但是这样做还是有问题的,因为如果加入一种新的食物,就需要更改所有的策略类,使所有加热状态都够判定新的食物。
微波炉例子就到这里吧,至于冰箱的例子,原文描述为:
“用Java写一个冰箱,注意家用冰箱多数分为冷冻柜和冷藏柜两个柜(冰箱随机)”
还是先找变化点,其中,每个柜的大小、开门方向或制冷量都是其属性而已,不属于变化点。
我认为变化点在以下描述中可以看出来:
冰箱有双开门或单开门:其中双开门又包括上冷藏下冷冻,也可能会是下冷藏上冷冻;而单开门可能只有冷藏,但也可能把冰柜也算在内。所以变化点之一就是冰箱的不同组合方式会是单柜或不同的上下柜。
另外,此处可以看到,有的组合了两种,有的只有一种,有的可能有特殊的保鲜柜,
将来的冰箱除了单开门和双开门,可能会加入三开门(保鲜柜)等。这时,问题不只是组合方式更加灵活,除了更加灵活的组合方式外,还有就是加入了新的冰柜类型即“保鲜柜”。
这两个变化点都可以用组合模式来完成,组合模式不仅可以让你的类组合起来更灵活,而且可以让新组件的添加独立于以前的结构。
注意:上述我所说的三个模式是GoF书中的composite组合、strategy策略和state状态。


http://www.ppmy.cn/news/136712.html

相关文章

冰箱的耗电量

耗电量分为额定耗电量和实际耗电量。冰箱铭牌上标注的耗电量为额定耗电量。额定耗电量是在环境温度25℃时,冰箱处于稳定运行状态(冷藏室平均温度5℃冷冻室最高温度-18℃),运行24小时所消耗的电能。实际耗电量是指冰箱在实际使用中…

巨简单!秒懂面向对象编程和面向过程编程的区别(把大象塞进冰箱需要几步?)

把大象塞进冰箱需要几步? 按照我们常规的思维惯性,需要三步: 1、打开冰箱 2、把大象塞进去 3、关上冰箱 考虑一下上述三个步骤,不难发现,这三个步骤构成了一个过程,这个过程的目的就是把大象塞进冰箱。 …

装修前必看系列|冰箱也有大学问,万元级冰箱选购攻略

马上就要到“金九银十”的家装旺季了,很多人已经开始着手为新家选购各式各样的家用电器了。尤其是冰箱、洗衣机、空调之类的大家电,不像普通消费类小家电更换频率那么高,买回家很可能就要陪伴很多年,所以在选择上更是要谨慎。 因…

浅谈面向对象的编程思想:如何优雅地把大象装进冰箱?

许多人刚学编程时,想必都听到过这样的话:“*语言是面向对象的,而***语言是面向过程的”。那时的新人还懵懵懂懂,就被大牛或者书上的大牛骗去学了一种听起来很厉害的语言,然而学了半天,也没搞清楚楚自己面向…

美的冰箱焕新开门红直播大牌冰箱、超值福利引观众抢购!

六月“极速焕新家”,美的冰箱在京东直播间掀起了冰箱需求大讨论!当晚众多用户前来围观,成交额高达27W,大牌冰箱当场卖爆!此外,开门红当天美的冰箱线上全网销售3.8亿,同比增加91%。挑战吧净味君第…

更智能的云米双开门风冷冰箱,除了追剧,还能让食材井井有条

冰箱是大家生活中必不可少的大家电,这两年市面上出现了很多智能化的冰箱,可以作为我们智能生活的中枢,我最近就入手了这台云米互联网冰箱 21Face ,它是一款458升的对开门冰箱,因为上面配备了一块15.6英寸的大屏,所以除了作为冰箱的基本功能之外,还可以用来控制其他家电。…

冰箱选购指南来了!一文告诉你哪几款值得买

众所周知,日立冰箱的技术沉淀一直可以的!挑选起来感觉这也好那也好,这么多双开门和十字门也不知道到底怎么选!?本期内容就为你chao详盘点了5款日立冰箱,不知道怎么选的宝宝赶快看过来抄作业!9.3…

基于AT89C51单片机的冰箱控制系统

目 录 前 言 1 第一章 概述 2 第一节 论文研究的背景和意义 2 第二节 电冰箱电控系统的发展现状 2 第三节 论文主要设计内容 3 第二章 总体设计方案 4 第一节 电冰箱电控系统的主要功能和要求 4 第二节 总体设计方案简介 4 第三章 系统硬件设计 6 第一节 AT89C51单片机最小系统…