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

資訊專欄INFORMATION COLUMN

架構師的工具-模板方法模式

roundstones / 2817人閱讀

摘要:也是一些架構師常用的模式。寫出方法,需要子類自己定義穿衣服需要子類自定義洗臉刷牙子類自定義方法出門準備工作需要子類自定義出門穿阿迪吊絲的衣服整理文件,找工作恩,這個模板,差不多能滿足正常人的需求。

所謂的模板就是一個重用一萬次都不會覺得有問題的代碼。 在es6中,提出了一個 "``"反引號的書寫方式--又叫做模板字符串.他最大的功能就是用來書寫模板html的.
通常在js中使用模板是

  "There are " + basket.count + " " +
  "items in your basket, " +
  "" + basket.onSale +
  " are on sale!"

像這樣使用的
在ES6中引入了模板字符串的概念,只需要使用反引號進行包裹就可以: 引入的變量可以使用${}進行包裹上面可以修改為:

`  //這里就是反引號,注意不是上引號,而是鍵盤esc下面那個鍵  
    There are ${basket.count} items  //插入指定的變量   
    in your basket, ${basket.onSale}  
    are on sale! 
`

上面的代碼就可以作為一串模板代碼出現。
同理,在js的設計模式中,也存在模板方法模式.

模板方法模式

模板方法模式是一種基于類和繼承的模式。也是一些架構師常用的模式。
看個栗子: 小明起床
首先,小明起床,喜歡穿NB系列衣服,然后洗臉刷牙,整理書包,出門。(我這里列的是大部分人有的,如果遇見一些生活習慣不同的,那先將就下吧。:)
轉換為代碼:

var GetUp = function(){}
GetUp.prototype.wear = function(){
    console.log("穿NB系列的衣服");
}
GetUp.prototype.brush = function(){
    console.log("洗臉刷牙");
}
GetUp.prototype.sortOut = function(){
    console.log("整理書包");
}
GetUp.prototype.out = function(){
    console.log("出門");
}
GetUp.prototype.init = function(){
    this.wear();
    this.brush();
    this.sortOut();
    this.out();
}
var xiaoming = new GetUp();
xiaoming.init();

看上去,可以完美的表達小明的起床過程,但是我們是有情懷的人。我們想做的是,能不能抽象出一個大部分人都能用的起床模式. 有,我們可以想想。
我是一個窮逼,我家只能穿阿迪吊絲的衣服,
我現在正在找工作,我需要整理文件。
然后,洗臉刷牙這個習慣還是有的。
出門是必須的。
那么對比可以看出,只有兩個方法的內容不一樣,只需要對這兩個方法進行抽象. 相當于寫一個抽象方法,然后讓子類自己重寫。

var GetUp = function(){}
GetUp.prototype.wear = function(){   //寫出方法,需要子類自己定義
    throw "穿衣服需要子類自定義";
}
GetUp.prototype.brush = function(){
    console.log("洗臉刷牙");
}
GetUp.prototype.sortOut = function(){  //子類自定義方法
    throw "出門準備工作需要子類自定義";
}
GetUp.prototype.out = function(){
    console.log("出門");
}
GetUp.prototype.init = function(){
    this.wear();
    this.brush();
    this.sortOut();
    this.out();
}
var xiaoMing = new GetUp();
xiaoMing.wear = function(){
    console.log("穿阿迪吊絲的衣服");
}
xiaoMing.sortOut = function(){
    console.log("整理文件,找工作");
}
xiaoMing.init();

恩,這個模板,差不多能滿足正常人的需求。 但是,世界只有相對性,而沒有絕對性,某些有怪癖,比如,早上不洗臉刷牙.這種情況也是存在的。(我小時候,為了逃避刷牙,經常起得比我媽還早,就跑去上課). md, 怪不得我那時候同座都嫌棄我,哎,也沒有找到小時候的知己。現在腸子都悔青了。
回正題。所以,要滿足這類人的需求,我們要用到一個叫做鉤子方法。其實就是一個flag.用來代表你是不是比較特殊的人。

var GetUp = function(){}
GetUp.prototype.wear = function(){   //寫出方法,需要子類自己定義
    throw "穿衣服需要子類自定義";
}
GetUp.prototype.brush = function(){
    console.log("洗臉刷牙");
}
GetUp.prototype.sortOut = function(){  //子類自定義方法
    throw "出門準備工作需要子類自定義";
}
GetUp.prototype.out = function(){
    console.log("出門");
}
GetUp.prototype.needBrush = function(){  //是否需要刷牙,默認為需要
    return  true;  
}
GetUp.prototype.init = function(){
    this.wear();
    if(this.needBrush())this.brush();
    this.sortOut();
    this.out();
}
var xiaoMing = new GetUp();
xiaoMing.wear = function(){
    console.log("穿阿迪吊絲的衣服");
}
xiaoMing.sortOut = function(){
    console.log("整理文件,找工作");
}
xiaoMing.needBrush = function(){return false;}
xiaoMing.init();

上面自定義的 "needBrush" 方法就是一個鉤子方法,用來表明,這個人是不是特立獨行的人。
其實,我們拋開鉤子的寫法,了解下他的本質,我們可以發現,一個鉤子的添加,是給你抽象類的重用性大大加分的一項,將變化的一部分,給分離出來,更大程度的讓代碼得到重用.
但是,在js中寫類,有點太過牽強。要知道js中,函數,對象才是一等公民.我們可以使用高階函數重構一個例子.

var GetUp = function(person){
    var wear = person.wear || function(){
        throw "穿衣服需要子類自定義";
    }   
    var brush = function(){
        console.log("洗臉刷牙");
    }
    var sortOut = person.sortOut || function(){
        throw "出門準備工作需要子類自定義";
    }
    var needBrush = person.needBrush || function(){
        return true;
    }
    var out = function(){
        console.log("出門");
    }
    var init = function(){
        wear();
        if(needBrush()) brush();
        sortOut();
        out();
    }
    return  function(){
        init();
    }
}
var jimmy = {
    wear(){
        console.log("穿鳥不拉屎的衣服");
    },
    sortOut(){
        console.log("整理書包");
    }
}
var _jimmy = GetUp(jimmy);
_jimmy();

但是為了統一,可以將init方法返回.

var GetUp = function(person){
    //...
    return {
        init
    }
}
var _jimmy = GetUp(jimmy);
_jimmy.init();

這樣寫,更具有代表性,讓人能夠一眼看出來表示的意思.

模板方法的應用

模板方法的應用,其實往大的用,是給架構師來使用。比如他設計一個模板,然后交給底層程序員去實現。相當于,一個產經提一個需求,然后交給你來實現具體的內容(這兩者的區別就是,一個可以忽悠,另一個不能忽悠).
往小的用,那就不叫模板了,就是普通的策略者模式了。
說了這么多,其實,廢話+n. 模板方法在我們這個level 其實用的還是比較少了。當然也不排除,你對這個模板方法有著SM的愛好,天天套它。所以,還是一句話,不要為了模式而模式。看自己心情使用吧.
ending~

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/91615.html

相關文章

  • 互聯網常用設計模式——通往架構師的第一步

    摘要:設計模式的分類經典應用框架中常見的設計模式分為三類創建型模式對類的實例化過程的抽象。對象的結構模式是動態的。對象的行為模式則使用對象的聚合來分配行為。設計模式是個好東西,以后肯定還要進一步的學習,并且在項目中多實踐,提升自己的設計能力。 什么是設計模式? Christopher Alexander?說過:每一個模式描述了一個在我們周圍不斷重復發生的問題,以及該問題的解決方案的核心。這樣...

    張紅新 評論0 收藏0
  • 架構師究竟要不要寫代碼?

    摘要:畢竟,架構師不參與寫代碼的工作。例如,通常架構師需要針對可能發生的每種情況進行規劃。這種架構師需要信任開發團隊來編寫代碼。 showImg(https://segmentfault.com/img/bVblaqV?w=900&h=383); Talk is cheap, show me the code!但是在互聯網企業中,身處技術要職的架構師到底需不需要寫代碼? showImg(ht...

    30e8336b8229 評論0 收藏0
  • 總結|成為架構師的一些思考與經驗

    摘要:架構師寫代碼寫代碼的架構師應在第一時間發現代碼問題,及時反饋。精通高并發卻不知道高并發的瓶頸在哪精通架構設計卻不能保證系統高可用架構師最重要的工作就是實踐與大牛之間的距離要客觀的評價自己的能力。 1. 體系化的學習 每天的時間使有限的,而接觸的信息是無窮無盡的。在熟悉了工作之后,最重要的事情就是如何提高學習的效率,最好的辦法是: 體系化的學習 擁有了體系化結構知識之后,再去了解別人的觀...

    Coding01 評論0 收藏0
  • 《前端架構設計》讀后筆記

    摘要:作為一名前端架構師,你的工作是不斷地探索和評估新的技術平臺方法和框架。世界上沒有一刀切式的解決方案,而前端架構師的使命正是將項目的需求與前端開發的實際情況相結合。 做前端工作一段時間了,也寫了不少的項目。但是突然好像快要失去了興趣。美工、后臺、項目經理、測試等人員多層夾擊。美工說就這么設計,你就得完全按著來。后臺說這個需求做不了,得那樣做,于是已經做好的頁面推倒重來。測試說,這樣做更符...

    Ocean 評論0 收藏0
  • Simon Brown:架構師與程序員的區別

    摘要:從根本上講,架構師是一個技術領導者的角色,這就是最大的區別。對于這個問題來說,沒錯,有一些相關主題沒有出現在這本書中,這些主題可以構成一本與程序員必讀之軟件架構相互補的書。我從軟件架構的視角特別能注意到這件事。 非商業轉載請注明作譯者、出處,并保留本文的原始鏈接:http://www.ituring.com.cn/article/178034 Simon Brown 是全球知...

    Turbo 評論0 收藏0

發表評論

0條評論

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