Re: [问题] 组合模式(Composite Pattern)到底是什么

楼主: H45 (!H45)   2016-09-28 14:59:37
※ 引述《henry8168 (番薯猴)》之铭言:
: ※ [本文转录自 C_and_CPP 看板 #1NwFzdvb ]
: 作者: henry8168 (番薯猴) 看板: C_and_CPP
: 标题: [问题] 组合模式(Composite Pattern)到底是什么
: 时间: Mon Sep 26 18:58:41 2016
: 在FB的靠北工程师看到一篇文
: https://goo.gl/u8dTYM
: 这种语法确实很冗长,然后看到留言有一个回复说要善用组合模式。
: 我就很好奇组合模式是什么,Google了一下,找到这4份网页,
: http://www.one-tab.com/page/CRw70YIPR0Ky9az36aOG8Q
: 每一个都提到leaf、add、remove,但有看没有懂,
: 请问有高手能解释一下组合模式什么概念吗?
: 套用组合模式后,靠北工程师的那份Code又会变成怎样的?
: 希望能够让我听懂,200P将奉上给第一位解答者,感激不尽
不同的作业系统和机型很可能需要不同的程式码来实作某个很底层的功能,尤其是这功能
和作业系统或机型本身有非常强的关联性的时候,几乎不可能用一样的程式码做一样的事
情。
在这种情况之下,用 if else 来区分环境是不可避免的,但是必须考虑这样的 if else
不应出现在程式码太多次,理想的情况下,应只出现一次。
举例来说,如果有两个底层的功能都需要判断作业系统和机型来决定要如何实作,是否这
两个功能都要写一样的 if else 流程控制结构呢?
那如果有三个,或三个以上底层的功能呢?
或许,这样的 if else 只需要出现一次。
我不敢说自己是什么专家,但如果是我来做,我会用下面的方式
// initialize object depending on ios and iphone
if (IS_OS_5_OR_LATER) {
// create object in type ios5
}
else if (IS_OS_6_OR_LATER) {
if (IS_IPHONE5) {
// create object in type ios6_for_iphone5
}
else {
// create object in type ios6
}
}
else if (IS_OS_7_OR_LATER) {
if (IS_IPHONE5) {
// create object in type ios7_for_iphone5
}
else {
// create object in type ios7
}
}
// call func1
object->func1()
// call func2
object->func2()
这样的做法,只须在创造物件时判断作业系统和机型版本
无须在 func1() 和 func2() 内再判断一次
个人认为,这和责任链、组合模式没有关系。

Links booklink

Contact Us: admin [ a t ] ucptt.com