<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    細(xì)心!用心!耐心!

    吾非文人,乃市井一俗人也,讀百卷書,跨江河千里,故申城一游; 一兩滴辛酸,三四年學(xué)業(yè),五六點(diǎn)粗墨,七八筆買賣,九十道人情。

    BlogJava 聯(lián)系 聚合 管理
      1 Posts :: 196 Stories :: 10 Comments :: 0 Trackbacks
    考慮一個(gè)狀況,您所經(jīng)營的工廠正在生產(chǎn)一個(gè)新的電視機(jī)產(chǎn)品,現(xiàn)在有一個(gè)問題發(fā)生了,您的電視機(jī)產(chǎn)品所有的組件都可以自行生產(chǎn),像是操作面版、電源、搖控裝置等等等,但螢?zāi)粎s必須依賴另一個(gè)廠商或子廠商供應(yīng),這時(shí)您怎麼辦?

    您不能將生產(chǎn)進(jìn)度停下了,相反的您必須確定一些事情,您知道有關(guān)於螢?zāi)豢刂频乃薪槊妫梢詫⑦@些對(duì)介面的操作溝通先實(shí)現(xiàn),等到螢?zāi)坏搅耍苯訉⑽災(zāi)慌c您的半成品組合起來,一個(gè)完整的成品即可出廠。

    Factory Method模式在一個(gè)抽象類中留下某個(gè)創(chuàng)建元件的抽象方法沒有實(shí)作,其它與元件操作相關(guān)聯(lián)的方法都先依賴於元件所定義的介面,而不是依賴於元件的實(shí)現(xiàn),當(dāng)您的成品中有一個(gè)或多個(gè)元件無法確定時(shí),您先確定與這些元件的操作介面,然後用元件的抽象操作介面先完成其它的工作,元件的實(shí)作(實(shí)現(xiàn))則推遲至實(shí)現(xiàn)元件介面的子類完成,一旦元件加入,即可完成您的成品。

    再舉一個(gè)例子,假設(shè)您要完成一個(gè)文件編輯器,您希望這個(gè)編輯器可以適用於所有類型的檔案編輯,例如RTF、DOC、TXT等等,儘管這些文件有著不同的格式,您先確定的是這些文件必然具備的一些操作介面,例如儲(chǔ)存、開啟、關(guān)閉等等,您用一個(gè)IDocument類型來進(jìn)行操作,這麼一來這個(gè)框架就無需考慮實(shí)際的儲(chǔ)存、開啟等細(xì)節(jié)是如何進(jìn)行的。

    以 UML 類別圖來表現(xiàn)以下的概念:
    FactoryMethod

    AbstractEditor中的createDocument()方法是個(gè)抽象方法,因?yàn)榭蚣懿恢滥鷮?shí)現(xiàn)一個(gè)什麼類型的文件,這個(gè)抽象方法將推遲至繼承AbstractEditor的子類中實(shí)現(xiàn)。

    這個(gè)架構(gòu)可用以下簡單的示意程式來作示範(fàn),當(dāng)中實(shí)現(xiàn)了一個(gè)RTFDocument,雖然在AbstractEditor中並不知道我們會(huì)套用這個(gè)RTFDocument,但您可以看到,透過多型操作,您的框架可以進(jìn)行對(duì)文件的相關(guān)操作。
    • AbstractEditor.java
    public abstract class AbstractEditor {
    private IDocument document;
    public abstract IDocument createDocument();

    public void newDocument() {
    document = createDocument();
    document.open();
    }

    public void saveDocument() {
    if(document != null)
    document.save();
    }

    public void closeDocument() {
    if(document != null)
    document.close();
    }
    }

    • IDocument.java
    public interface IDocument {
    public void open();
    public void save();
    public void close();
    }

    • RTFEditor.java
    public class RTFEditor extends AbstractEditor { 
    public IDocument createDocument() {
    return new RTFDocument();
    }
    }

    • RTFDocument.java
    public class RTFDocument implements IDocument {
    public RTFDocument() {
    System.out.println("建立RTF文件");
    }

    public void open() {
    System.out.println("開啟文件");
    }

    public void save() {
    System.out.println("儲(chǔ)存文件");
    }

    public void close() {
    System.out.println("關(guān)閉文件");
    }
    }

    將Factory Method的結(jié)構(gòu)繪出如下:
    FactoryMethod

    Factory Method中的AbstractOperator中擁有一個(gè)抽象的factoryMethod()方法,它負(fù)責(zé)生成一個(gè)IProduct類型的物件,由於目前還不知道將如何實(shí)現(xiàn)這個(gè)類型,所以將之推遲至子類別中實(shí)現(xiàn),在AbstractOperator中先實(shí)現(xiàn)IProduct操作介面溝通的部份,只要介面統(tǒng)一了,利用多型操作即可完成各種不同的IProduct類型之物件操作。

    也就是說,對(duì)AbstractOperator來說,其操作的IProduct是可以抽換的。
    posted on 2007-04-17 10:32 張金鵬 閱讀(214) 評(píng)論(0)  編輯  收藏 所屬分類: Creational 模式
    主站蜘蛛池模板: 麻豆视频免费观看| 国产精品内射视频免费| **俄罗斯毛片免费| 亚洲美免无码中文字幕在线| 日本免费电影一区二区| 亚洲av无码国产精品夜色午夜| 一级做a爰黑人又硬又粗免费看51社区国产精品视 | 亚洲欧美日本韩国| 成人免费在线观看网站| 久久精品国产亚洲AV未满十八| 成全视频免费高清 | 亚洲国产精品国自产拍电影| 国产成人精品无码免费看| 亚洲午夜精品一区二区| 亚洲人成免费电影| 亚洲熟妇无码一区二区三区| 免费无码又爽又刺激高潮| 国产亚洲综合精品一区二区三区| 亚洲成a人无码av波多野按摩| 一级视频免费观看| 久久久久久亚洲精品中文字幕| 亚州免费一级毛片| 亚洲国产成人无码AV在线 | 久久久久成人片免费观看蜜芽| 久久亚洲精品无码VA大香大香| 久久不见久久见中文字幕免费| 亚洲一本到无码av中文字幕| 亚洲AV无码乱码精品国产| 国产一级a毛一级a看免费视频| 久久亚洲日韩精品一区二区三区| 岛国大片免费在线观看| 永久免费无码日韩视频| 亚洲一本综合久久| 亚洲精品动漫免费二区| 日韩精品视频在线观看免费| 亚洲国产精品无码中文字| 好吊妞在线新免费视频| 国产精品成人69XXX免费视频| 亚洲成a人片毛片在线| 四虎影视永久免费观看| 黄网站免费在线观看|