策略模式--把大象塞進(jìn)冰箱

大熊今天接到一個客戶的要求,需要把一頭大象塞進(jìn)冰箱蝠咆。

具體步驟大家都知道:
1·把冰箱門打開;
2·把大象放進(jìn)去北滥;
3·把冰箱門關(guān)上刚操;

大熊就想到需要先實現(xiàn)三個具體步驟,而在實現(xiàn)具體步驟前再芋,需要定義一個接口(interface)赡茸,方法就是抽象的步驟

/**
 * 步驟的接口
 */
interface Strategy {
    /**
     * 抽象的操作
     * 把大象放進(jìn)冰箱的123個操作步驟
     */
    fun operate()
}

然后,三個步驟就可以實現(xiàn)interface祝闻,把每一步的具體操作完美實現(xiàn)占卧。

class Operation1 : Strategy {
    override fun operate() {
        println("步驟1:打開冰箱門")
    }
}

class Operation2 : Strategy {
    override fun operate() {
        println("步驟2:把大象塞進(jìn)去")
    }
}

class Operation3 : Strategy {
    override fun operate() {
        println("步驟3:把冰箱門關(guān)上")
    }
}

三個步驟的具體實現(xiàn)已經(jīng)存在了,可是客戶不知道怎么用啊联喘,所以大熊又制作了一本操作手冊(UserManual)
手冊就是幫助用戶怎么把大象放進(jìn)冰箱

/**
 * 把大象關(guān)進(jìn)冰箱的使用說明手冊
 */
class UserManual(strategy: Strategy) {
    private var iStrategy: Strategy? = null
    init {
        this.iStrategy = strategy
    }
    
    /**
     * 查看使用說明
     * 下一步
     */
    fun watch() {
        iStrategy?.operate()
    }
}

拿到了說明書后华蜒,大熊只需要告訴客戶看說明書的哪一個步驟,我們的說明書就把具體實現(xiàn)告訴給客戶了豁遭。

fun main(args: Array<String>) {

    //打開操作手冊第一步
    var userManualBook = UserManual(Operation1())
    userManualBook.watch()

    //打開操作手冊第二步
    userManualBook = UserManual(Operation2())
    userManualBook.watch()

    //打開操作手冊第三步
    userManualBook = UserManual(Operation3())
    userManualBook.watch()

}
//logcat
步驟1:打開冰箱門
步驟2:把大象塞進(jìn)去
步驟3:把冰箱門關(guān)上

策略模式的實現(xiàn)叭喜,就是完美詮釋了java的高內(nèi)聚腻窒,低耦合的思路兼犯。
如果我們需要增加第4個步驟,就可以實現(xiàn)interface茁计,對客戶只需告訴他操作的名字闪幽。我們完全不需要改動第1啥辨,第2,第3個步驟class盯腌。這也就是設(shè)計模式的意義所在溉知。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子级乍,更是在濱河造成了極大的恐慌舌劳,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玫荣,死亡現(xiàn)場離奇詭異甚淡,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)捅厂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門贯卦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人恒傻,你說我怎么就攤上這事〗ǖ耍” “怎么了盈厘?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長官边。 經(jīng)常有香客問我沸手,道長,這世上最難降的妖魔是什么注簿? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任契吉,我火速辦了婚禮,結(jié)果婚禮上诡渴,老公的妹妹穿的比我還像新娘捐晶。我一直安慰自己,他們只是感情好妄辩,可當(dāng)我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布惑灵。 她就那樣靜靜地躺著,像睡著了一般眼耀。 火紅的嫁衣襯著肌膚如雪英支。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天哮伟,我揣著相機(jī)與錄音干花,去河邊找鬼。 笑死楞黄,一個胖子當(dāng)著我的面吹牛池凄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鬼廓,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼修赞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起柏副,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤勾邦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后割择,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體眷篇,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年荔泳,在試婚紗的時候發(fā)現(xiàn)自己被綠了蕉饼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡玛歌,死狀恐怖昧港,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情支子,我是刑警寧澤创肥,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站值朋,受9級特大地震影響叹侄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜昨登,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一趾代、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧丰辣,春花似錦撒强、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至得湘,卻和暖如春杖玲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背淘正。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工摆马, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鸿吆。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓囤采,卻偏偏與公主長得像,于是被迫代替她去往敵國和親惩淳。 傳聞我的和親對象是個殘疾皇子蕉毯,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 『把大象放到冰箱里乓搬,需要哪三步?』——這是源于春晚小品的一個段子代虾。 如果我們用編程語言Java來表達(dá)這個過程进肯,那么...
    匿蟒閱讀 3,425評論 1 4
  • 這個讀書方法,可能會顛覆你對讀書以往的認(rèn)知|開卷 或許讀書已經(jīng)成為你的一種生活方式棉磨,在讀書中也構(gòu)建了一個屬于自己的...
    yuqifuli閱讀 5,487評論 3 13
  • 覺察日記 1.事件:一些父母了解學(xué)習(xí)的重要性并且孩子己出現(xiàn)很嚴(yán)重問題江掩,卻以很多理由拒絕學(xué)習(xí)成長 2.感受:遺憾,平...
    智慧人生_1119閱讀 190評論 0 1
  • 今天是什么日子:好日子 起床:6:13 就寢:10:00 天氣:晴轉(zhuǎn)雨 心情:還不錯??? 紀(jì)念日:占時不是 任務(wù)...
    genius_Q閱讀 146評論 0 0
  • 女孩子對吃的好像都沒有什么抵抗力乘瓤。 今天晚飯剛過环形,我和小美女一起去逛街,晚飯吃了九分飽的我衙傀,看到諸多美食抬吟,雖然還是...
    Tiffany自由的風(fēng)閱讀 144評論 0 0