国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

設(shè)計模式(8)模板方法(講解+應(yīng)用)

SoapEye / 2687人閱讀

摘要:目錄模板方法為什么使用模板方法模板方法應(yīng)用實例模板方法模板方法在一個方法中定義一個算法的框架,然后將該方法中的一些步驟延遲到子類中,使得再不改變算法的前提下,重新定義自己的算法。

目錄

模板方法

為什么使用模板方法

模板方法應(yīng)用實例

模板方法

模板方法:在一個方法中定義一個算法的框架,然后將該方法中的一些步驟延遲到子類中,使得再不改變算法的前提下,重新定義自己的算法。

看了模板方法的定義,可能感覺這和策略模式?jīng)]有什么區(qū)別,都是對算法的封裝,但是其差別在那里呢?

區(qū)別:策略模式是通過組合的方式將多個類的方法組合在一起,而模板方法是通過繼承來實現(xiàn)的,即為在父類中有一個final的不可修改的方法,將我們的算法邏輯寫在里面,然后其組合起來的算法可以在其子類中具體的根據(jù)實際情況去定義。

為什么要用模板方法

現(xiàn)在我們要實現(xiàn)一個流水線,這個流水線上,我們可以生產(chǎn)過的機(jī)器,而這些機(jī)器組成上是存在一些差別的,如果機(jī)器的種類不是很多,我們可以針對每一個機(jī)器都做一條流水線,但是如果機(jī)器種類很多,如果這些機(jī)器的出貨時間是不同的,那么一旦第一批貨出完,那么該機(jī)器的生產(chǎn)流水線就會閑置下來,利用率就會很低,以此類比,如果我們針對每種機(jī)型創(chuàng)建一個類,勢必會使得我們的代碼很臃腫,會有很多的重復(fù)代碼存在,根據(jù)設(shè)計模式的基本原則,將不變的抽離出來,對變化的部分進(jìn)行封裝,通過這來使我們的代碼更簡潔的同時減少后期的維護(hù)成本。
因此我們可以這么寫

//機(jī)器裝配的基類
public abstract class Machine{
//機(jī)器裝配的流程,final不可被復(fù)寫,保證方裝配算法不被破壞
    final void produce(){
        createFrame();
        addHead();
        addBody();
        if(ifDressup())
            dressUp();
    }
//創(chuàng)建框架
    public abstract void createFrame();
//添加一個機(jī)器頭
    public abstract void addHead();
//添加一個機(jī)器的身子
    public abstract void addBody();
//為機(jī)器進(jìn)行裝扮
    public abstract void dressUp();
//判斷是否為該機(jī)器進(jìn)行裝扮
    public boolean ifDressup(){
        return true;
    }

}
//繼承自基類的一個子類
public class InflatableDoll{
    public void createFrame(){
        System.out.println("This is a Frame");
    }

    public void addBody(){
        System.out.println("This is a body");
    }

    public void dressUp(){
        System.out.println("This is a beautiful cloth");
    }

}

上述有注釋的地方就不在此啰嗦了,上一篇結(jié)尾的時候要說下的一個鉤子方法,這里提一下,這里的豆子方法就是ifDressup(),如果沒有鉤子方法,我們的的裝配算法邏輯在父類中是final的,我們是不可以對其進(jìn)行控制的,因此也就喪失了靈活性,當(dāng)然我們希望能夠在子類中對其進(jìn)行控制,這樣我們就可以更靈活的控制這個裝配過程,因此出現(xiàn)了鉤子方法,通過鉤子方法將我們的子類和父類掛接起來,在我們的模板方法中將鉤子方法作為一個裝配條件,然后在我們的子類中根據(jù)我們自己的要求來覆寫這個方法。、

模板方法應(yīng)用實例

現(xiàn)實中,有那些例子呢?看到著,應(yīng)該能夠想起來一些什么,我們開發(fā)中的view,大多都是通過這種方式來進(jìn)行的。以Android中的view為例子

public class View{
    /**
     * 鉤子操作,空實現(xiàn)
     */
    protected void onDraw(Canvas canvas) {
    }
 
    /**
     *鉤子操作,空實現(xiàn)
     */
    protected void dispatchDraw(Canvas canvas) {
    }
 
    //算法骨架
    public void draw(Canvas canvas) {
       if (!verticalEdges && !horizontalEdges) {
            // 步驟1
            if (!dirtyOpaque) onDraw(canvas);
 
            // 步驟2
            dispatchDraw(canvas);
 
            // 步驟3
            onDrawScrollBars(canvas);
 
            return;
        }
    }
    //... ...
}

View類

public class MyView extends View {
 
    public MyView(Context context) {
        super(context);
    }
 
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
    }
 
    @Override
    protected void dispatchDraw(Canvas canvas) {
        super.dispatchDraw(canvas);
    }
     
}

通過上面的例子,我們可以看出我們的view控件繪制的一個流程。

下篇更新工廠模式,這個是當(dāng)時看的時候最迷糊的一個了。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/64632.html

相關(guān)文章

  • 設(shè)計模式(7)代理模式講解+應(yīng)用

    摘要:目錄代理模式為什么使用代理模式應(yīng)用實例代理模式對于代理模式,和委托方式分不開,感覺委托和代理沒有什么區(qū)別,而委托卻不被稱做一個設(shè)計模式,今天再次看代理模式,才有所理解。回到正題代理模式為對象提供一個替身或者是占一個位子,從而控制對其訪問。 目錄 代理模式 為什么使用代理模式 應(yīng)用實例 代理模式 對于代理模式,和委托方式分不開,感覺委托和代理沒有什么區(qū)別,而委托卻不被稱做一個設(shè)計模式...

    JasinYip 評論0 收藏0
  • 通過nodeclub項目源碼來講解如何做一個nodejs + express + mongodb項目

    摘要:是的源碼,算是一個基本的博客系統(tǒng),包含文章發(fā)布,關(guān)注,評論等功能。這些功能可以說是任何一個網(wǎng)站的基礎(chǔ)。比如運(yùn)營數(shù)據(jù)配置和其他數(shù)據(jù)配置分開,因為很有可能需要做一個小的工具來讓非技術(shù)人員配置相關(guān)參數(shù)。模式在中有一個專門的章節(jié)來講解。 1. About 1.1 what: nodeclub是cnodejs.com的源碼,cnode算是一個基本的博客系統(tǒng),包含文章發(fā)布, 關(guān)注,評論等功能...

    kaka 評論0 收藏0
  • 文字檢測識別系統(tǒng)好用嗎?都針對什么進(jìn)行識別?

    摘要:神經(jīng)網(wǎng)絡(luò)以上驗證碼識別都依賴于字符切分,切分的好壞幾乎直接決定識別的準(zhǔn)確程度。目前驗證碼識別最先進(jìn)的是谷歌在識別街景圖像中門牌號碼中使用的一套的算法。 最近在一個爬蟲項目中遇到了驗證碼,需要機(jī)器自動識別繞過。剛好與題主的問題類似,在這里做一些分享。 在網(wǎng)上調(diào)研了資料和文獻(xiàn)后,分別采用OCR識別和模板庫匹配方法對不同類型驗證碼進(jìn)行了識別。主要過程可以分解為三個步驟:1.圖片清理,2.字符...

    wanglu1209 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<