91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

【設計模式與Android】模板方法模式——照葫蘆畫瓢

發布時間:2020-03-21 17:54:26 來源:網絡 閱讀:892 作者:東風玖哥 欄目:移動開發

什么是模板方法模式

 

所謂模板方法模式,就是定義一個操作中的算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變一個算法的結構即可重新定義該算法的某些特定步驟。

 

模板方法模式的實現方式

 

模板方法模式實際上時封裝了一個固定流(tao)程(lu),第一步做什么,第二步做什么都已經在抽象類中定義好,子類只需要在框架不被修改的情況下實現某些步驟的算法替換。

 

當代小說網站的男頻爽文,都是有一定套路的,開篇都是一個loser,然后意外獲得秘笈,接下來修仙,最后成為宇宙霸主。我相信epubit的讀者是不會讀這些給識字不多的人讀的書的,因此我要拿《紅樓夢》中的“掰謊記”舉例,賈母對某一類文學作品的套路的總結:

public abstract class Template {

    abstract String getTemplateName();

    abstract boolean isChancellor();

    abstract String getHeroineName();

    abstract String getHeroName();

    // 開口都是書香門第
    protected void scholarlyFamily(){
        Log.e(getTemplateName()," 書香門第");
    }

    // 父親不是尚書就是宰相
    protected void father(){
        Log.e(getTemplateName()," 父親是"+(isChancellor()?"宰相":"尚書"));
    };

    // 生一個×××必是愛如珍寶
    protected void daughter(){
        Log.e(getTemplateName()," 生一個×××("+getHeroineName()+")愛如珍寶");
    }

    // 這×××必是通文知禮,無所不曉,竟是個絕代佳人
    protected void marvelOfBeauty(){
        Log.e(getTemplateName()," "+getHeroineName()+"通文知禮,無所不曉,竟是個絕代佳人");
    }

    // 只一見了一個清俊的男人,不管是親是友,便想起終身大事來
    protected void marriage(){
        Log.e(getTemplateName()," 一見了一個清俊的男人("+getHeroName()+")便想起終身大事來");
    }

    // 父母也忘了,書禮也忘了,鬼不成鬼,賊不成賊
    protected void forget(){
        Log.e(getTemplateName()," "+getHeroineName()+"父母也忘了,書禮也忘了,鬼不成鬼,賊不成賊");
    }

    /**
     * 這個模(tao)板(lu)必須final
     */
    public final void play(){
        scholarlyFamily();
        father();
        daughter();
        marvelOfBeauty();
        marriage();
        forget();
    }

}

 

被賈母掰謊的作品《鳳求凰》:

public class Courtship extends Template{

    @Override
    String getTemplateName() {
        return "《鳳求凰》";
    }

    @Override
    boolean isChancellor() {
        return false;
    }

    @Override
    String getHeroineName() {
        return "李雛鸞";
    }

    @Override
    String getHeroName() {
        return "王熙鳳";
    }

    /**
     * 女主角父親既不是尚書也不是宰相
     */
    protected void father(){
        Log.e(getTemplateName(),"這莊上有個鄉紳,姓李");
    }
}

 

類似的作品《西廂記》:

public class WesternChamber extends Template{
    @Override
    String getTemplateName() {
        return "《西廂記》";
    }

    @Override
    boolean isChancellor() {
        return true;
    }

    @Override
    String getHeroineName() {
        return "崔鶯鶯";
    }

    @Override
    String getHeroName() {
        return "張君瑞";
    }
}

 

賈母過了一個開心的元宵節,讀者們也學會了模板方法模式。

 

Android源碼中的模板方法模式

 

1)AsyncTask

用戶可以根據需求重寫onPreExecute、doInBackground、onPostExecute這個邏輯流程,這是典型的模板方法模式。

 

2)生命周期

無論Activity、Service還是Fragment,一切以“on”打頭的被動方法都是模板方法模式的一部分。

 

Android開發中如何利用模板方法模式

 

模板方法模式的優點很明顯:

1)封裝不變部分,擴展可變部分

2)提取公共部分代碼,便于維護。

因此適用于以下場合:

(1)多個子類有公有的方法,并且邏輯基本相同時。

2)重復、復雜的算法,可以把核心算法設計為模板方法,周邊的相關細節功能則由各個子類實現。

3)重構時,把相同的代碼抽取到父類中,然后通過鉤子函數約束其行為。

 

需要注意的幾個問題

 

模板方法模式會帶來代碼閱讀的難度。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

屏东市| 皮山县| 昌图县| 长宁区| 昌乐县| 贞丰县| 福建省| 元谋县| 蒙山县| 毕节市| 伽师县| 来安县| 娱乐| 勃利县| 黄石市| 静乐县| 平湖市| 玉山县| 普宁市| 潮安县| 蓝田县| 南江县| 黄平县| 台山市| 潢川县| 四子王旗| 玉环县| 临西县| 金沙县| 象州县| 汪清县| 博乐市| 伊川县| 朝阳区| 保山市| 夹江县| 汾阳市| 德江县| 凤台县| 耒阳市| 库尔勒市|