?? Θ妓Α.mht
字號:
class=3DSpellE><span lang=3DEN-US>TLeaf</span></span><span style=3D'font-fa=
mily:PMingLiU;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Ro=
man"'>物件則其請求會被İ=
52;接處理,如果是</span><span
class=3DSpellE><span lang=3DEN-US>TComposite</span></span><span style=3D'fo=
nt-family:
PMingLiU;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Tim=
es New Roman"'>物件其請求則傳$=
958;到其子元件;可能的=
;話只是在傳遞前或傳&#=
36958;後追加一些操作。</spa=
n></p>
<h3><span style=3D'font-family:PMingLiU;mso-ascii-font-family:Arial;mso-han=
si-font-family:
Arial'>結論</span><span lang=3DEN-US>(consequences)</span></h3>
<p class=3DMsoNormal style=3D'margin-left:27.0pt'><span style=3D'font-famil=
y:PMingLiU;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Ro=
man"'>合成樣式是:</span></p>
<p class=3DMsoNormal style=3D'margin-left:51.0pt;text-indent:-24.0pt;mso-li=
st:l7 level1 lfo12;
tab-stops:list 51.0pt'><![if !supportLists]><span lang=3DEN-US style=3D'mso=
-fareast-font-family:
"Times New Roman"'><span style=3D'mso-list:Ignore'>1.<span style=3D'font:7.=
0pt "Times New Roman"'>
</span></span></span><![endif]><b><span style=3D'font-family:PMingLiU;mso-a=
scii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>定義=
包含原始物件及合成=
9289;件的類別層級架構ᦂ=
6;</span></b><span
style=3D'font-family:PMingLiU;mso-ascii-font-family:"Times New Roman";mso-h=
ansi-font-family:
"Times New Roman"'>原始物件可以組=
合成複雜物件意味著=
0063;可以再遞迴組合更ඳ=
9;雜的物件。而使用端&=
#30340;程式碼需求的是一=
491;原始物件也可以是一=
;個合成物件。</span></p>
<p class=3DMsoNormal style=3D'margin-left:51.0pt;text-indent:-24.0pt;mso-li=
st:l7 level1 lfo12;
tab-stops:list 51.0pt'><![if !supportLists]><span lang=3DEN-US style=3D'mso=
-fareast-font-family:
"Times New Roman"'><span style=3D'mso-list:Ignore'>2.<span style=3D'font:7.=
0pt "Times New Roman"'>
</span></span></span><![endif]><b><span style=3D'font-family:PMingLiU;mso-a=
scii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>讓使=
用端簡易使用:</span></b><span
style=3D'font-family:PMingLiU;mso-ascii-font-family:"Times New Roman";mso-h=
ansi-font-family:
"Times New Roman"'>使用端可以以一=
致的方式處理單一物=
0214;及合成物件,使用ో=
1;一般無須知道也無須&=
#38364;心他們處理的是單=
968;物件或者是合成物件=
;。如此可以簡化使用&#=
31471;的程式碼;因為避Ð=
13;在定義合成的類別中=
撰寫</span><span
lang=3DEN-US>tag-and-case-statement-style</span><span style=3D'font-family:=
PMingLiU;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Ro=
man"'>功能。</span></p>
<p class=3DMsoNormal style=3D'margin-left:51.0pt;text-indent:-24.0pt;mso-li=
st:l7 level1 lfo12;
tab-stops:list 51.0pt'><![if !supportLists]><span lang=3DEN-US style=3D'mso=
-fareast-font-family:
"Times New Roman"'><span style=3D'mso-list:Ignore'>3.<span style=3D'font:7.=
0pt "Times New Roman"'>
</span></span></span><![endif]><b><span style=3D'font-family:PMingLiU;mso-a=
scii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>容易=
增加一個新的元件:</s=
pan></b><span
style=3D'font-family:PMingLiU;mso-ascii-font-family:"Times New Roman";mso-h=
ansi-font-family:
"Times New Roman"'>新定義的</span><span class=3DSpe=
llE><span
lang=3DEN-US>TComposite</span></span><span style=3D'font-family:PMingLiU;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Ro=
man"'>或</span><span
class=3DSpellE><span lang=3DEN-US>TLeaf</span></span><span style=3D'font-fa=
mily:PMingLiU;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Ro=
man"'>次類別可以自動的Ō=
87;現有的結構及使用端=
程式碼工作,使用端=
8961;須因新的合成類別೎=
0;改變程式。</span></p>
<p class=3DMsoNormal style=3D'margin-left:51.0pt;text-indent:-24.0pt;mso-li=
st:l7 level1 lfo12;
tab-stops:list 51.0pt'><![if !supportLists]><span lang=3DEN-US style=3D'mso=
-fareast-font-family:
"Times New Roman"'><span style=3D'mso-list:Ignore'>4.<span style=3D'font:7.=
0pt "Times New Roman"'>
</span></span></span><![endif]><b><span style=3D'font-family:PMingLiU;mso-a=
scii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>讓你=
的設計更加一般化:</s=
pan></b><span
style=3D'font-family:PMingLiU;mso-ascii-font-family:"Times New Roman";mso-h=
ansi-font-family:
"Times New Roman"'>讓其方便增加新=
元件的缺點是難以重=
5972;</span><span
lang=3DEN-US>(restrict)</span><span style=3D'font-family:PMingLiU;mso-ascii=
-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>合成=
中的元件。有時你想=
5731;合成中只有特定的ࠠ=
3;件,在合成樣式中你&=
#28961;法依賴型別系統</span><span
lang=3DEN-US>(type system)</span><span style=3D'font-family:PMingLiU;mso-as=
cii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>確保=
這個限制,你必須使=
9992;在執行期檢測。</span><span
lang=3DEN-US>2001/1/8</span></p>
<h3><span style=3D'font-family:PMingLiU;mso-ascii-font-family:Arial;mso-han=
si-font-family:
Arial'>實作</span><span lang=3DEN-US>(Implementation)</span></h=
3>
<p class=3DMsoNormal style=3D'margin-left:24.0pt;text-indent:-24.0pt;mso-li=
st:l26 level1 lfo20;
tab-stops:list 24.0pt'><![if !supportLists]><span lang=3DEN-US style=3D'mso=
-fareast-font-family:
"Times New Roman"'><span style=3D'mso-list:Ignore'>1.<span style=3D'font:7.=
0pt "Times New Roman"'>
</span></span></span><![endif]><b><span style=3D'font-family:PMingLiU;mso-a=
scii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>明確=
的親屬參考</span></b><span
style=3D'font-family:PMingLiU;mso-ascii-font-family:"Times New Roman";mso-h=
ansi-font-family:
"Times New Roman"'>:維護子代到其=
祖代的參考可以簡化=
6861;溯</span><span
lang=3DEN-US>(traversal)</span><span style=3D'font-family:PMingLiU;mso-asci=
i-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>及維=
護元件結構,對於祖=
9006;別的參考或者刪除ߌ=
8;個元件只要溯結構上&=
#31227;即可祖類別參考也=
903;援責任鏈</span><span
lang=3DEN-US>(Chain of Responsibility)</span><span style=3D'font-family:PMi=
ngLiU;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Ro=
man"'>樣式。</span></p>
<p class=3DMsoNormal style=3D'margin-left:27.0pt;mso-para-margin-left:2.25g=
d;
text-indent:27.0pt;mso-char-indent-count:2.25'><span style=3D'font-family:P=
MingLiU;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Ro=
man"'>而定義祖類別參考į=
40;地方是</span><span
class=3DSpellE><span lang=3DEN-US>TComponent</span></span><span style=3D'fo=
nt-family:
PMingLiU;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Tim=
es New Roman"'>類別,而</span><span
class=3DSpellE><span lang=3DEN-US>TLeaf</span></span><span style=3D'font-fa=
mily:PMingLiU;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Ro=
man"'>及</span><span
class=3DSpellE><span lang=3DEN-US>TComposite</span></span><span style=3D'fo=
nt-family:
PMingLiU;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Tim=
es New Roman"'>類別可以繼承這=
491;參考及管理參考的操=
;作。</span></p>
<p class=3DMsoNormal style=3D'margin-left:27.0pt;mso-para-margin-left:2.25g=
d;
text-indent:27.0pt;mso-char-indent-count:2.25'><span style=3D'font-family:P=
MingLiU;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Ro=
man"'>對於祖類別的參考á=
22;本上需維護一個不變=
</span><span
lang=3DEN-US>(invariant)</span><span style=3D'font-family:PMingLiU;mso-asci=
i-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>的關=
係:所有</span><span
class=3DSpellE><span lang=3DEN-US>TComposite</span></span><span style=3D'fo=
nt-family:
PMingLiU;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Tim=
es New Roman"'>類別的子類別都=
377;一個</span><span
class=3DSpellE><span lang=3DEN-US>TComposite</span></span><span style=3D'fo=
nt-family:
PMingLiU;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Tim=
es New Roman"'>的祖類別</span><span
lang=3DEN-US>(all children of a composite have as their parent the composit=
e that
in turn has them as children)</span><span style=3D'font-family:PMingLiU;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Ro=
man"'>,而最簡單確保上Ű=
48;關係的方式是一個元=
件別只要當它加入</span><span
class=3DSpellE><span lang=3DEN-US>TComposite</span></span><span style=3D'fo=
nt-family:
PMingLiU;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Tim=
es New Roman"'>或自</span><span
class=3DSpellE><span lang=3DEN-US>TComposite</span></span><span style=3D'fo=
nt-family:
PMingLiU;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Tim=
es New Roman"'>移除即改變其祖'=
006;別,只要這個功能可=
;以實作在</span><span
class=3DSpellE><span lang=3DEN-US>TComposite</span></span><span style=3D'fo=
nt-family:
PMingLiU;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Tim=
es New Roman"'>的</span><span
lang=3DEN-US>Add()</span><span style=3D'font-family:PMingLiU;mso-ascii-font=
-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>及</span><=
span
lang=3DEN-US>Remove()</span><span style=3D'font-family:PMingLiU;mso-ascii-f=
ont-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>操作=
中;同時被所有子類=
1029;繼承,那麼上述不෴=
2;的關係便可以自動維&=
#35703;。</span></p>
<p class=3DMsoNormal style=3D'margin-left:24.0pt;text-indent:-24.0pt;mso-li=
st:l26 level1 lfo20;
tab-stops:list 24.0pt'><![if !supportLists]><span lang=3DEN-US style=3D'mso=
-fareast-font-family:
"Times New Roman"'><span style=3D'mso-list:Ignore'>2.<span style=3D'font:7.=
0pt "Times New Roman"'>
</span></span></span><![endif]><b><span style=3D'font-family:PMingLiU;mso-a=
scii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>共用=
元件</span></b><span
style=3D'font-family:PMingLiU;mso-ascii-font-family:"Times New Roman";mso-h=
ansi-font-family:
"Times New Roman"'>:共用元件一般=
是有用的,例如減少=
5352;憶體使用。但是如ੜ=
4;一個元件有一個以上&=
#30340;祖類別共用元件變=
340;困難。可能的解決方=
;式是讓子類別儲存多&#=
20491;祖類別,但這樣會Ű=
96;成模糊</span><span
lang=3DEN-US>(ambiguities)</span><span style=3D'font-family:PMingLiU;mso-as=
cii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>以致=
擴大</span><span
lang=3DEN-US>(propagates up)</span><span style=3D'font-family:PMingLiU;mso-=
ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>其結=
構,輕量樣式</span><span
lang=3DEN-US>(Flyweight)</span><span style=3D'font-family:PMingLiU;mso-asci=
i-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>可以=
改善設計以避免將所=
6377;祖類別儲存在一起ᦁ=
2;這是當子類別可以避&=
#20813;經由具體化</span><span
lang=3DEN-US>(externalizing)</span><span style=3D'font-family:PMingLiU;mso-=
ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>其部=
分或全部的狀態送出=
1062;類別的請求便可以๮=
8;成。</span><span
lang=3DEN-US>(It works in case where children can avoid sending parent requ=
ests
by externalizing some or all of their state.)</span></p>
<p class=3DMsoNormal style=3D'margin-left:24.0pt;text-indent:-24.0pt;mso-li=
st:l26 level1 lfo20;
tab-stops:list 24.0pt'><![if !supportLists]><span lang=3DEN-US style=3D'mso=
-fareast-font-family:
"Times New Roman"'><span style=3D'mso-list:Ignore'>3.<span style=3D'font:7.=
0pt "Times New Roman"'>
</span></span></span><![endif]><b><span style=3D'font-family:PMingLiU;mso-a=
scii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>最大=
化的元件介面</span></b><span
style=3D'font-family:PMingLiU;mso-ascii-font-family:"Times New Roman";mso-h=
ansi-font-family:
"Times New Roman"'>:合成樣式的一=
個目標是讓使用端無=
8920;瞭解他們所使用的</span=
><span
class=3DSpellE><span lang=3DEN-US>TLeaf</span></span><span style=3D'font-fa=
mily:PMingLiU;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Ro=
man"'>及</span><span
class=3DSpellE><span lang=3DEN-US>TComposite</span></span><span style=3D'fo=
nt-family:
PMingLiU;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Tim=
es New Roman"'>類別。要達成&#
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -