瑞士军刀威戈Wenger 87功能巨无霸 多功能工具刀王者
2026-06-04 22:08:15发布 浏览3次 信息编号:132230
友情提醒:凡是以各种理由向你收取费用,均有骗子嫌疑,请提高警惕,不要轻易支付。
瑞士军刀威戈Wenger 87功能巨无霸 多功能工具刀王者
“单一职责原则”属于面向对象软件开发的基本原则里头的一个, 面向对象的思想源自现实世界里总结出来的这个情况, 然而最近察觉面向对象的单一职责原则跟现实好像存在一些冲突。
我们先看下引起事非争端的优雅的瑞士军刀吧:
瑞士军刀全都是多功能的工具刀, 上面左图所示的那种, 起码拥有14项功能, 而右图所示的种, 至少具备34项功能!
这个是带MP3播放功能的!还有更加强大的:
这是威戈, 知名瑞士刀制造商最新推出的一把长度为8.75英寸, 重量是2磅也就是1公斤, 内部含有87种工具, 编号为16999的瑞士刀。看来几乎曾经存在于瑞士刀中的物品都有了, 它包含七种各异的小刀, 高尔夫球鞋清理钳, 脚踏车链铆钉调整器, 还有一只测距达300英尺即90公尺的雷射笔。这把瑞士刀的用途, 或许是使一个打完高尔夫球的人, 在清理好自己的球鞋之后, 立刻将脚踏车调校好, 随后骑行至一个人迹罕至的树林里。
这堪称极其“变态”, 我近来持续在撰写关于扩展方法的文章, 所有文章里的扩展方法汇总起来同军刀有几分相像了。
瑞士军刀跟普通的刀, 也就是那种遵循单一职责设计的刀, 二者最大的差异在于便利程度(先暂且不考虑最后一点, 哈哈), 它属于多功能刀具,并非只是极为简易的刀具。从功能层面来分析, 瑞士军刀“突破”了单一职责原则。也许产品设计与软件系统设计没办法相提并论, 毕竟在规模、复杂度方面相差甚远。单一职责原则是为了应对复杂问题而设立的。所以咱们换个角度去思索, 我们组建一支军队, 此刻要给士兵配备一些装备。军队、士兵、装备全都是对象!是不是有点相似了呢。对于士兵, 是配备一把具备多种功能的瑞士军刀, 抑或是配备数量众多且零散的小工具呢?
上述对比应许不太合适, 然而能够从中推断出一项结论, 那就是, 有时候运用单一职责, 并未见到良好成效, 反倒变得更加麻烦。
来看下单一职责原则(-)的定义, C. 对它的解释是: Each class have one and only one to , 单一职责并不是直观理解成类只能有单一功能, 单一职责是从变化角度去考虑的, 一个类应该(注意是而不是must, 是应该而不是必须)有且只有一个导致它变化的原因(直译)。
的解释改变的单一职责原则的含义:
1.所谓“单一职责”, 并非是说具备单一功能, 而是仅仅因为一个缘由, 它才会发生变化。
2.“原则”更像是一种比较强烈的建议。
基于这两点理解,引发出我的观点:
1.颗粒大小各异的对象, 针对小颗粒的那些对象把单一职责予以应用是不恰当的, 小颗粒对象譬如小公司的员工, 他们是需要一个人去兼任好几个职务的, 要是运用单一职责, 小颗粒对象又会被分解成更多更小颗粒的对象, 小颗粒对象的数量会变得越来越多, 这会给我们在做名字的拟定、使用以及维护这些方面带来麻烦。
2.基础类库不适用, 举例来说, 像用于字符串常见处理的类, 比如获取子字符串 的类, 将其转换为其他类型的类, 再如进行为空判断的类, 把这些放在一个类里, 反倒会让使用变得更为便利!
3.“单一职责原则”更适合于中大型系统, 系统越小, 运用该原则越不合算, 一个超小的系统只有一个界面, 面向对象甚至都无需使用。
4.单一职责固然是要运用的, 然而并非是应用到每一个细微之处, 某些局部倘若不应用, 对于整体而言影响是极为微小的, 反倒会显得更加灵活, 更加节省时间。
4.原则, 是前辈历经多年经验总结而成的, 原则的名字, 或许不会改变, 然而原则的内涵, 却可能在悄然发生变化。
5.“”、“原则”, 有可能是前人的一种方式, 用来表达强烈建议, 并非“must”、“必须”。
再度回过头去瞧一瞧先前的军刀, 它具备着多种功能, 然而能够致使它产生变化的缘由究竟是什么? 在此处想到了一个因素, 便是客户应用。依据客户的具体应用情形, 存在着多种功能组合, 不同的组合又被划分成不同的系列……一旦客户有了新的需求, 便会推出新的产品……在这个过程当中, 或许涵盖了对象的继承、组合等等, 想必是颇为复杂的。当然了, 也碰到过客户的需求极为特殊, 于是推出了前面那款极为变态的, 应该算是一个特例!
而再思索: 军刀之上存有一个用于开启啤酒瓶的启子, 要是啤酒瓶的盖子尺寸产生了改变? 那带有MP3功能的军刀上面设有耳机插孔, 倘若耳机接口出现了变化又该如何? 认真去想一想, 能够致使其发生变化的缘由着实不少。然而这些变化出现的可能性实在是太小了, 就算确实发生了, 军刀也该退役了, 新品便会被推出了。
所以, 我觉得瑞士军刀相对来讲是较为契合单一职责原则的!先前作出的结论“有时运用单一职责, 并未瞧见良好的成效, 反倒变得更为麻烦”, 存在两种阐释:
1.对单一职责错误地进行了那种理解以为是单一功能, 还进一步去做功能的分解, 故而麻烦了。
2.无论是对象大小如何, 还是程序规模怎样, 一概都采用, 然而采用得并不恰当, 故而引发麻烦。
最终得出这样的结论, 朝向对象性质的思考方式以及准则, 跟实际存在的世界呢, 是相契合的, 而且还能够跟随时代步伐不断前进。
本人未曾接受过正规的软件方面的教育, 对于面向对象的理解处于残缺不全的状态, 在技术方面也是这儿一点那儿一点, 呈现出东一块西一块的情形, 杂乱的想法数量也不少。若说得不对, 还请各位前辈予以指正!
提醒:请联系我时一定说明是从奢侈品修复培训上看到的!