亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

設計模式---策略模式

2019-11-14 23:29:05
字體:
來源:轉載
供稿:網友
設計模式---策略模式

策略模式定義了一系列的算法,并將每一個算法封裝起來,而且使它們還可以相互替換。策略模式讓算法獨立于使用它的客戶而獨立變化。

  • 抽象策略角色: 策略類,通常由一個接口或者抽象類實現。
  • 具體策略角色:包裝了相關的算法和行為。
  • 環境角色:持有一個策略類的引用,最終給客戶端調用。

適用范圍:

• 許多相關的類僅僅是行為有異。 “策略”提供了一種用多個行為中的一個行為來配置一個類的方法。即一個系統需要動態地在幾種算法中選擇一種。• 需要使用一個算法的不同變體。例如,你可能會定義一些反映不同的空間 /時間權衡的算法。當這些變體實現為一個算法的類層次時 ,可以使用策略模式。• 算法使用客戶不應該知道的數據。可使用策略模式以避免暴露復雜的、與算法相關的數據結構。• 一個類定義了多種行為 , 并且這些行為在這個類的操作中以多個條件語句的形式出現。將相關的條件分支移入它們各自的Strategy類中以代替這些條件語句。

下面通過一個簡單的案列講解

例:

劉備要到江東娶老婆了,走之前諸葛亮給趙云(伴郎)三個錦囊妙計,說是按天機拆開解決棘手問題,嘿,還別說,真是解決了大問題,搞到最后是周瑜陪了夫人又折兵呀,那咱們先看看這個場景是什么樣子的。先說這個場景中的要素:三個妙計,一個錦囊,一個趙云,妙計是小亮同志給的,妙計是放置在錦囊里,俗稱就是錦囊妙計嘛,那趙云就是一個干活的人,從錦囊中取出妙計,執行,然后獲勝,用 java 程序怎么表現這個呢?我們先看類圖:

三個妙計是同一類型的東東,那咱就寫個接口:

package com.oumyye.策略模式;/*** @author * I'm glad to share my knowledge with you all.* 首先定一個策略接口,這是諸葛亮老人家給趙云的三個錦囊妙計的接口**/public interface IStrategy { //每個錦囊妙計都是一個可執行的算法public void Operate();}

然后再寫三個實現類,有三個妙計嘛:

one

package com.oumyye.策略模式;/*** @author * I'm glad to share my knowledge with you all.* 找喬國老幫忙,使孫權不能殺劉備*/public class BackDoor implements IStrategy {public void operate() { System. out.

two

package com.oumyye.策略模式;/*** @author * I'm glad to share my knowledge with you all.* 求吳國太開個綠燈*/public class GivenGreenLight implements IStrategy {public void operate() { System. out.println(" 求吳國太開個綠燈, 放行! "); }}

three

package com.oumyye.策略模式;/*** @author* I'm glad to share my knowledge with you all.* 孫夫人斷后,擋住追兵*/public class BlockEnemy implements IStrategy {public void operate() { System. out.println(" 孫夫人斷后,擋住追兵"); }}

好了,大家看看,三個妙計是有了,那需要有個地方放這些妙計呀,放錦囊呀:

package com.oumyye.策略模式;/*** @author * I'm glad to share my knowledge with you all.* 計謀有了,那還要有錦囊*/public class Context {//構造函數,你要使用那個妙計private IStrategy straegy;public Context(IStrategy strategy){ this. straegy = strategy; }//使用計謀了,看我出招了public void operate(){ this. straegy.operate(); }}

然后就是趙云雄赳赳的揣著三個錦囊,拉著已步入老年行列的、還想著娶純情少女的、色迷迷的劉老爺子去入贅了,嗨,還別說,小亮的三個妙計還真是不錯,瞅瞅:

package com.oumyye.策略模式;/** * @author  */public class ZhaoYun {    /**     * 趙云出場了,他根據諸葛亮給他的交代,依次拆開妙計     */    public static void main(String[] args) {        Context context;        // 剛剛到吳國的時候拆第一個        System.out.println("-----------剛剛到吳國的時候拆第一個-------------");        context = new Context(new BackDoor()); // 拿到妙計        context.operate(); // 拆開執行        System.out.println("/n/n/n/n/n/n/n/n");        // 劉備樂不思蜀了,拆第二個了        System.out.println("-----------劉備樂不思蜀了,拆第二個了-------------");        context = new Context(new GivenGreenLight());        context.operate(); // 執行了第二個錦囊了        System.out.println("/n/n/n/n/n/n/n/n");        // 孫權的小兵追了,咋辦?拆第三個        System.out.println("-----------孫權的小兵追了,咋辦?拆第三個-------------");        context = new Context(new BlockEnemy());        context.operate(); // 孫夫人退兵        System.out.println("/n/n/n/n/n/n/n/n");        /*         * 問題來了:趙云實際不知道是那個策略呀,他只知道拆第一個錦囊,而不知道是BackDoor這個妙計,咋辦?         * 似乎這個策略模式已經把計謀名稱寫出來了         *          * 錯! BackDoor、 GivenGreenLight、 BlockEnemy只是一個代碼,你寫成first、 second、         * third,沒人會說你錯!         *          * 策略模式的好處就是:體現了高內聚低耦合的特性呀,缺點嘛,這個那個,我回去再查查         */    }}

就這三招,搞的周郎是“陪了夫人又折兵”呀!這就是策略模式,高內聚低耦合的特點也表現出來了,還有一個就是擴展性,也就是 OCP 原則,策略類可以繼續增加下去,只要修改 Context.java 就可以了,這個不多說了,自己領會吧。

策略模式的優點:
  • 相關算法系列Strategy類層次為Context定義了一系列的可供重用的算法或行為。繼承有助于析取出這些算法中的公共功能。
  • 提供了可以替換繼承關系的辦法: 繼承提供了另一種支持多種算法或行為的方法。你可以直接生成一個Context類的子類,從而給它以不同的行為。但這會將行為硬行編制到 Context中,而將算法的實現與Context的實現混合起來,從而使Context難以理解、難以維護和難以擴展,而且還不能動態地改變算法。最后你得到一堆相關的類 , 它們之間的唯一差別是它們所使用的算法或行為。將算法封裝在獨立的Strategy類中使得你可以獨立于其Context改變它,使它易于切換、易于理解、易于擴展。
  • 消除了一些if else條件語句:Strategy模式提供了用條件語句選擇所需的行為以外的另一種選擇。當不同的行為堆砌在一個類中時 ,很難避免使用條件語句來選擇合適的行為。將行為封裝在一個個獨立的Strategy類中消除了這些條件語句。含有許多條件語句的代碼通常意味著需要使用Strategy模式。
  • 實現的選擇Strategy模式可以提供相同行為的不同實現??蛻艨梢愿鶕煌瑫r間 /空間權衡取舍要求從不同策略中進行選擇。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美成人一区二区在线电影| 亚洲成人网av| 国产丝袜一区二区三区免费视频| 国产精品毛片a∨一区二区三区|国| 91产国在线观看动作片喷水| 国产成人精品一区二区在线| 久久久国产成人精品| 国产日韩中文在线| 国产美女被下药99| 欧美一区在线直播| 国产精品成人一区二区三区吃奶| 国产精品视频久久久| 亚洲香蕉成视频在线观看| 北条麻妃久久精品| 久久99久久亚洲国产| 欧美日韩国产成人在线| 国产亚洲精品日韩| 色综合久综合久久综合久鬼88| 久久久国产精品免费| 国产精品日日摸夜夜添夜夜av| 日韩欧美aaa| 欧美激情免费视频| 日韩电影网在线| 亚洲精品久久久久中文字幕二区| 91在线视频成人| 欧美视频在线免费| 国产精品一区二区三| 66m—66摸成人免费视频| 久久99热精品这里久久精品| 精品偷拍一区二区三区在线看| 日韩成人中文字幕在线观看| 欧美性视频精品| 欧美国产极速在线| 国产欧美亚洲精品| 久久精品精品电影网| 欧美激情按摩在线| 日韩精品免费在线视频观看| 全亚洲最色的网站在线观看| 国内外成人免费激情在线视频网站| 欧美视频免费在线观看| 国产一区二区三区直播精品电影| 91在线视频一区| 亚洲欧美资源在线| 国产精品www网站| 亚洲欧美日韩中文在线制服| 久久精品久久久久| 欧美午夜女人视频在线| 亚洲一区第一页| 97国产一区二区精品久久呦| 九九热在线精品视频| 国产一区二区三区在线免费观看| 一区二区三区 在线观看视| 91精品中国老女人| 欧美精品www在线观看| 国产成人免费av电影| 91亚洲精华国产精华| 国产精品入口福利| 91国偷自产一区二区三区的观看方式| 亚洲欧美日韩一区二区三区在线| 亚洲日韩欧美视频| 欧美不卡视频一区发布| www.日韩系列| 欧美性猛交xxxx偷拍洗澡| 欧美日韩电影在线观看| 亚洲人成电影网站| 在线视频亚洲欧美| 国产午夜精品久久久| 亚洲v日韩v综合v精品v| 日韩激情视频在线| 久久久久久中文| 欧美精品成人91久久久久久久| 亚洲女成人图区| 久久久精品网站| 日韩资源在线观看| 国产日韩换脸av一区在线观看| 欧美视频专区一二在线观看| 国产一区二区丝袜| 97av在线影院| 欧美中文字幕第一页| 日本道色综合久久影院| 欧美俄罗斯乱妇| 亚洲一区美女视频在线观看免费| 亚洲视频一区二区三区| 日韩视频在线观看免费| 北条麻妃一区二区三区中文字幕| 日韩日本欧美亚洲| 亚洲日韩欧美视频| 影音先锋欧美在线资源| 欧美日韩成人在线视频| 亚洲美女在线看| 国产精品成人av性教育| 日韩国产精品一区| 亚洲黄一区二区| 日本欧美精品在线| 国产精品美女久久久久久免费| 国产精品爽爽ⅴa在线观看| 国产成人免费91av在线| 4438全国成人免费| 久久久999国产精品| 欧美精品免费播放| 亚洲精品福利视频| 精品亚洲一区二区三区在线观看| 日本老师69xxx| 亚洲第一福利在线观看| 国产精品91免费在线| 亚洲国产欧美自拍| 国产精品高清网站| 91精品视频专区| 日韩成人激情视频| 欧美视频在线观看免费网址| 国产精品h片在线播放| 91久久精品美女高潮| 精品久久久久久亚洲精品| 国产日产亚洲精品| 国产精自产拍久久久久久蜜| 欧美性生交大片免费| 91精品中文在线| 亚洲欧洲高清在线| 日韩精品久久久久久福利| 国产91久久婷婷一区二区| 国产精品mp4| 欧美大片免费观看在线观看网站推荐| 久久av红桃一区二区小说| 亚洲第一免费网站| 欧美激情精品久久久久久久变态| 日韩中文字幕欧美| 国产一区在线播放| 国产精品成人av在线| 亚洲欧美日韩爽爽影院| 欧洲日韩成人av| 日韩视频第一页| 久久精品最新地址| 91人成网站www| 亚洲丁香婷深爱综合| 91高清视频免费观看| 在线观看成人黄色| 亚洲欧美日韩视频一区| 国产91免费看片| 欧美日韩免费区域视频在线观看| 精品在线观看国产| 一区二区三区视频观看| 日韩在线观看高清| 欧美日韩中文字幕综合视频| 亚洲国产精品专区久久| 日韩久久免费视频| 国产精品亚发布| 亚洲第五色综合网| 久久综合伊人77777尤物| 国产精品狼人色视频一区| 性色av一区二区三区红粉影视| 成人国产精品色哟哟| 91社区国产高清| 久久精品国产亚洲一区二区| 欧美精品国产精品日韩精品| 91精品视频免费观看| 成人午夜黄色影院| 亚洲a区在线视频| 色樱桃影院亚洲精品影院| 成人444kkkk在线观看| 中文字幕欧美日韩| 一区三区二区视频| 亚洲欧洲xxxx| 91网站在线免费观看| 亚洲视频国产视频|