小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

java設(shè)計模式之——策略模式

 博雅書屋lhs 2015-05-03

1,什么是策略模式?

策略模式,又叫算法簇模式,就是定義了不同的算法族,并且之間可以互相替換,此模式讓算法的變化獨立于使用算法的客戶。

 

2,策略模式有什么好處?

     策略模式的好處在于你可以動態(tài)的改變對象的行為。

 

3,設(shè)計原則

 
     設(shè)計原則是把一個類中經(jīng)常改變或者將來可能改變的部分提取出來,作為一個接口(c++z中可以用虛類),然后在類中包含這個對象的實例,這樣類的實例在運行時就可以隨意調(diào)用實現(xiàn)了這個接口的類的行為。下面是一個例子。 


      策略模式屬于對象行為型模式,主要針對一組算法,將每一個算法封裝到具有共同接口的獨立的類中,從而使得它們可以相互替換。策略模式使得算法可以在不影響 到客戶端的情況下發(fā)生變化。通常,策略模式適用于當一個應用程序需要實現(xiàn)一種特定的服務(wù)或者功能,而且該程序有多種實現(xiàn)方式時使用。

 

4 ,策略模式中有三個對象:
(1)       環(huán)境對象:該類中實現(xiàn)了對抽象策略中定義的接口或者抽象類的引用。
(2)       抽象策略對象:它可由接口或抽象類來實現(xiàn)。
(3)       具體策略對象:它封裝了實現(xiàn)同不功能的不同算法。
利用策略模式構(gòu)建應用程序,可以根據(jù)用戶配置等內(nèi)容,選擇不同有算法來實現(xiàn)應用程序的功能。具體的選擇有環(huán)境對象來完成。采用這種方式可以避免由于使用條件語句而帶來的代碼混亂,提高應用程序的靈活性與條理性。

 

5,應用場景舉例:

 

劉備要到江東娶老婆了,走之前諸葛亮給趙云(伴郎)三個錦囊妙計,說是按天機拆開能解決棘手問題,嘿,還別說,真解決了大問題,搞到最后是周瑜陪了夫人又折兵,那咱們先看看這個場景是什么樣子的。

 

先說說這個場景中的要素:三個妙計,一個錦囊,一個趙云,妙計是亮哥給的,妙計放在錦囊里,俗稱就是錦囊妙計嘛,那趙云就是一個干活的人,從錦囊取出妙計,執(zhí)行,然后獲勝。用java程序怎么表現(xiàn)這些呢?

那我們先來看看圖?


 

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

Java代碼  收藏代碼
  1. package com.yangguangfu.strategy;  
  2. /** 
  3.  *  
  4.  * @author trygf521@126.com:阿福 
  5.  * 首先定義一個策略接口,這是諸葛亮老人家給趙云的三個錦囊妙計的接口。 
  6.  */  
  7. public interface IStrategy {  
  8.     //每個錦囊妙計都是一個可執(zhí)行的算法。  
  9.     public void operate();  
  10.   
  11. }  
 

然后再寫三個實現(xiàn)類,有三個妙計嘛:

 

妙計一:初到吳國:

Java代碼  收藏代碼
  1. package com.yangguangfu.strategy;  
  2. /** 
  3.  *  
  4.  * @author trygf521@126.com:阿福 
  5.  * 找喬國老幫忙,使孫權(quán)不能殺劉備。 
  6.  */  
  7. public class BackDoor implements IStrategy {  
  8.   
  9.     @Override  
  10.     public void operate() {  
  11.         System.out.println("找喬國老幫忙,讓吳國太給孫權(quán)施加壓力,使孫權(quán)不能殺劉備...");  
  12.     }  
  13.   
  14. }  
 

妙計二:求吳國太開個綠燈,放行:

Java代碼  收藏代碼
  1. package com.yangguangfu.strategy;  
  2. /** 
  3.  *  
  4.  * @author trygf521@126.com:阿福 
  5.  * 求吳國太開個綠燈。 
  6.  */  
  7. public class GivenGreenLight implements IStrategy {  
  8.   
  9.     @Override  
  10.     public void operate() {  
  11.         System.out.println("求吳國太開個綠燈,放行!");  
  12.           
  13.     }  
  14.   
  15. }  

 妙計三:孫夫人斷后,擋住追兵:

Java代碼  收藏代碼
  1. package com.yangguangfu.strategy;  
  2. /** 
  3.  *  
  4.  * @author trygf521@126.com:阿福 
  5.  * 孫夫人斷后,擋住追兵。 
  6.  */  
  7. public class BlackEnemy implements IStrategy {  
  8.   
  9.     @Override  
  10.     public void operate() {  
  11.         System.out.println("孫夫人斷后,擋住追兵...");  
  12.   
  13.     }  
  14.   
  15. }  

 

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

 

Java代碼  收藏代碼
  1. package com.yangguangfu.strategy;  
  2. /** 
  3.  *  
  4.  * @author trygf521@126.com:阿福 
  5.  * 
  6.  */  
  7. public class Context {  
  8.       
  9.     private IStrategy strategy;  
  10.     //構(gòu)造函數(shù),要你使用哪個妙計  
  11.     public Context(IStrategy strategy){  
  12.         this.strategy = strategy;  
  13.     }  
  14.       
  15.     public void operate(){  
  16.         this.strategy.operate();  
  17.     }  
  18.   
  19. }  
 

 

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

Java代碼  收藏代碼
  1. package com.yangguangfu.strategy;  
  2.   
  3. public class ZhaoYun {  
  4.   
  5.     /** 
  6.      * 趙云出場了,他根據(jù)諸葛亮給他的交代,依次拆開妙計 
  7.      */  
  8.     public static void main(String[] args) {  
  9.         Context context;  
  10.           
  11.         //剛到吳國的時候拆開第一個  
  12.         System.out.println("----------剛剛到吳國的時候拆開第一個---------------");  
  13.         context = new Context(new BackDoor());  
  14.         context.operate();//拆開執(zhí)行  
  15.         System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n");  
  16.           
  17.         //當劉備樂不思蜀時,拆開第二個  
  18.         System.out.println("----------劉備樂不思蜀,拆第二個了---------------");  
  19.         context = new Context(new GivenGreenLight());  
  20.         context.operate();//拆開執(zhí)行  
  21.         System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n");  
  22.           
  23.         //孫權(quán)的小追兵了,咋辦?拆開第三個錦囊  
  24.         System.out.println("----------孫權(quán)的小追兵了,咋辦?拆開第三個錦囊---------------");  
  25.         context = new Context(new BlackEnemy());  
  26.         context.operate();//拆開執(zhí)行  
  27.         System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n");  
  28.     }  
  29.   
  30. }  
 

后話:就這三招,搞得的周郎是“賠了夫人又折兵”呀!這就是策略模式,高內(nèi)聚低耦合的特點也表現(xiàn)出來了,還有一個就是擴展性,也就是OCP原則,策略類可以繼續(xù)添加下去氣,只是修改Context.java就可以了,這個不多說了,自己領(lǐng)會吧。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多