?? 紅よ猭妓Α.mht
字號:
margin-left:24.0pt;
text-indent:-24.0pt;
font-family:Wingdings;}
@list l7:level2
{mso-level-number-format:bullet;
mso-level-text:\F06E;
mso-level-tab-stop:48.0pt;
mso-level-number-position:left;
margin-left:48.0pt;
text-indent:-24.0pt;
font-family:Wingdings;}
@list l7:level3
{mso-level-number-format:bullet;
mso-level-text:\F06C;
mso-level-tab-stop:72.0pt;
mso-level-number-position:left;
margin-left:72.0pt;
text-indent:-24.0pt;
font-family:Wingdings;}
@list l8
{mso-list-id:1564411652;
mso-list-type:hybrid;
mso-list-template-ids:78810114 -378763470 67698713 67698715 67698703 67698=
713 67698715 67698703 67698713 67698715;}
@list l8:level1
{mso-level-tab-stop:18.0pt;
mso-level-number-position:left;
margin-left:18.0pt;
text-indent:-18.0pt;}
ol
{margin-bottom:0cm;}
ul
{margin-bottom:0cm;}
-->
</style>
<!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:\8868\683C\5167\6587;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";}
</style>
<![endif]--><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"2050"/>
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1"/>
</o:shapelayout></xml><![endif]-->
</head>
<body lang=3DZH-TW link=3Dblue vlink=3Dpurple style=3D'tab-interval:24.0pt;=
text-justify-trim:
punctuation'>
<div class=3DSection1 style=3D'layout-grid:18.0pt'>
<h2><span style=3D'font-family:PMingLiU;mso-ascii-font-family:Arial;mso-han=
si-font-family:
Arial'>工廠方法樣式</span><span lang=3D=
EN-US>(Factory
Method)</span></h2>
<p class=3DMsoNormal><span lang=3DEN-US><!--[if gte vml 1]><v:shapetype id=
=3D"_x0000_t75"
coordsize=3D"21600,21600" o:spt=3D"75" o:preferrelative=3D"t" path=3D"m@4@=
5l@4@11@9@11@9@5xe"
filled=3D"f" stroked=3D"f">
<v:stroke joinstyle=3D"miter"/>
<v:formulas>
<v:f eqn=3D"if lineDrawn pixelLineWidth 0"/>
<v:f eqn=3D"sum @0 1 0"/>
<v:f eqn=3D"sum 0 0 @1"/>
<v:f eqn=3D"prod @2 1 2"/>
<v:f eqn=3D"prod @3 21600 pixelWidth"/>
<v:f eqn=3D"prod @3 21600 pixelHeight"/>
<v:f eqn=3D"sum @0 0 1"/>
<v:f eqn=3D"prod @6 1 2"/>
<v:f eqn=3D"prod @7 21600 pixelWidth"/>
<v:f eqn=3D"sum @8 21600 0"/>
<v:f eqn=3D"prod @7 21600 pixelHeight"/>
<v:f eqn=3D"sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok=3D"f" gradientshapeok=3D"t" o:connecttype=3D"rect"/>
<o:lock v:ext=3D"edit" aspectratio=3D"t"/>
</v:shapetype><v:shape id=3D"_x0000_i1025" type=3D"#_x0000_t75" style=3D'wi=
dth:373.8pt;
height:16.8pt'>
<v:imagedata src=3D"file7231.files/image001.gif" o:title=3D"BD21303_"/>
</v:shape><![endif]--><![if !vml]><img width=3D498 height=3D22
src=3D"file7231.files/image001.gif" v:shapes=3D"_x0000_i1025"><![endif]></s=
pan></p>
<h3><span style=3D'font-family:PMingLiU;mso-ascii-font-family:Arial;mso-han=
si-font-family:
Arial'>目的</span><span lang=3DEN-US>(Intent)</span></h3>
<p class=3DMsoNormal style=3D'text-indent:27.0pt;mso-char-indent-count:2.25=
'><span
style=3D'font-family:PMingLiU;mso-ascii-font-family:"Times New Roman";mso-h=
ansi-font-family:
"Times New Roman"'>工廠方法定義構=
建物件的介面;但是=
5731;子類別決定哪一個༼=
6;別構建實體物件</span><span
lang=3DEN-US>(instantiate)</span><span style=3D'font-family:PMingLiU;mso-as=
cii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>,工=
廠方法將構建實體物=
0214;委託</span><span
lang=3DEN-US>(defer)</span><span style=3D'font-family:PMingLiU;mso-ascii-fo=
nt-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>給子=
類別。<span
style=3D'color:navy'>《譯註:因為ࢷ=
2;父類別並不知道要構&=
#24314;的物件實體是哪一=
491;子類別:因此將構建=
;物件的責任委託或者&#=
24310;遲到子類別才決定z=
90;》</span></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>(Motivation)</span></h3>
<p class=3DMsoNormal style=3D'text-indent:27.0pt;mso-char-indent-count:2.25=
'><span
style=3D'font-family:PMingLiU;mso-ascii-font-family:"Times New Roman";mso-h=
ansi-font-family:
"Times New Roman"'>框架</span><span lang=3DEN-US>(Framework)</s=
pan><span
style=3D'font-family:PMingLiU;mso-ascii-font-family:"Times New Roman";mso-h=
ansi-font-family:
"Times New Roman"'>使用抽象類別取=
定義及維護物件彼此=
0043;間的關係。框架同ਹ=
8;負有為這些物件構建&=
#23526;體的責任。</span></p>
<p class=3DMsoNormal style=3D'text-indent:27.0pt;mso-char-indent-count:2.25=
'><span
style=3D'font-family:PMingLiU;mso-ascii-font-family:"Times New Roman";mso-h=
ansi-font-family:
"Times New Roman"'>假設有一個應用=
系統</span><span
lang=3DEN-US>(application)</span><span style=3D'font-family:PMingLiU;mso-as=
cii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>的框=
架可以顯示各種文件</s=
pan><span
lang=3DEN-US>(document)</span><span style=3D'font-family:PMingLiU;mso-ascii=
-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>給使=
用端;這個框架可以=
5277;取出兩個主要類別ᦂ=
6;一個是應用程式類別<=
/span><span
lang=3DEN-US>(application)</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>(document)</span><span style=3D'font-family:PMingLiU;mso-ascii=
-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>。這=
兩個類別都是抽象的</s=
pan><span
lang=3DEN-US>(abstract)</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>(clients)</span><span style=3D'font-family:PMingLiU;mso-ascii-=
font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>必須=
繼承自這兩個類別以=
0637;解其如何去實作應ஷ=
2;系統的關連</span><span
lang=3DEN-US>(application-specific)</span><span style=3D'font-family:PMingL=
iU;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Ro=
man"'>文件<span
style=3D'color:navy'>《譯註:也就਷=
9;與應用程式相對可以&=
#34389;理的資料型態》</span>z=
90;例如我們建立的是一=
個繪圖系統;我們定=
2681;一個繪圖應用系統</span=
><span
lang=3DEN-US>(<span class=3DSpellE>DrawingApplication</span>)</span><span
style=3D'font-family:PMingLiU;mso-ascii-font-family:"Times New Roman";mso-h=
ansi-font-family:
"Times New Roman"'>及一個圖形文件=
</span><span
lang=3DEN-US>(<span class=3DSpellE>DrawingDocument</span>)</span><span
style=3D'font-family:PMingLiU;mso-ascii-font-family:"Times New Roman";mso-h=
ansi-font-family:
"Times New Roman"'>。</span><span lang=3DEN-US>,</span><span
style=3D'font-family:PMingLiU;mso-ascii-font-family:"Times New Roman";mso-h=
ansi-font-family:
"Times New Roman"'>這個繪圖應用系=
統負責管理文件即在=
8656;要時負責構建物件Ӎ=
0;</span></p>
<p class=3DMsoNormal style=3D'text-indent:27.0pt;mso-char-indent-count:2.25=
'><span
style=3D'font-family:PMingLiU;mso-ascii-font-family:"Times New Roman";mso-h=
ansi-font-family:
"Times New Roman"'>因為個別文件子=
類別的實體構建是屬=
6044;應用系統關連</span><span
lang=3DEN-US>(application-specific)</span><span style=3D'font-family:PMingL=
iU;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Ro=
man"'>;因系統無法事先IJ=
93;道哪一個文件的子類=
別要被構建實體;他=
1482;知道何時一個新的ਧ=
1;件物件要被構建;但&=
#19981;知道所要構建的是=
738;一類文件物件。此時=
;有個問題就是這個框&#=
26550;必須為一個類別構ó=
14;物件實體;但他只知=
道他的抽象類別;而=
5277;象類別是無法構建୰=
9;件實體的。</span></p>
<p class=3DMsoBodyTextIndent><span style=3D'font-family:PMingLiU;mso-ascii-=
font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>工廠=
方法樣式提供一個解=
7770;方式。他封裝哪一ࠁ=
1;文件物件必須構建的&=
#30693;識並且將這這個知#=
672;移出框架。</span></p>
<p class=3DMsoBodyTextIndent style=3D'text-indent:22.5pt'><!--[if gte vml 1=
]><v:shape
id=3D"_x0000_s1029" type=3D"#_x0000_t75" style=3D'position:absolute;left:0;
text-align:left;margin-left:0;margin-top:0;width:414pt;height:153pt;z-inde=
x:3;
mso-position-horizontal:center' stroked=3D"t" strokeweight=3D"1.25pt">
<v:imagedata src=3D"file7231.files/image002.emz" o:title=3D""/>
</v:shape><![endif]--><![if !vml]><span style=3D'mso-ignore:vglayout;positi=
on:
relative;z-index:3'><span style=3D'left:0px;position:absolute;left:0px;
top:-2px;width:556px;height:209px'><img width=3D556 height=3D209
src=3D"file7231.files/image010.gif" v:shapes=3D"_x0000_s1029"></span></span=
><![endif]><span
lang=3DEN-US><o:p> </o:p></span></p>
<p class=3DMsoBodyTextIndent><span lang=3DEN-US><o:p> </o:p></span></p>
<p class=3DMsoBodyTextIndent><span lang=3DEN-US><o:p> </o:p></span></p>
<p class=3DMsoBodyTextIndent><span lang=3DEN-US><o:p> </o:p></span></p>
<p class=3DMsoBodyTextIndent><span lang=3DEN-US><o:p> </o:p></span></p>
<p class=3DMsoBodyTextIndent><span lang=3DEN-US><o:p> </o:p></span></p>
<p class=3DMsoBodyTextIndent><span lang=3DEN-US><o:p> </o:p></span></p>
<p class=3DMsoBodyTextIndent><span lang=3DEN-US><o:p> </o:p></span></p>
<p class=3DMsoBodyTextIndent><span lang=3DEN-US><o:p> </o:p></span></p>
<br style=3D'mso-ignore:vglayout' clear=3DALL>
<p class=3DMsoNormal style=3D'text-indent:27.0pt;mso-char-indent-count:2.25=
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -