設計模式新概念一~IStrategyPattern(策略模式)—詳解

以前曾經想把設計模式給一一列舉出來形成文檔發佈,感覺這時間真是個問題,所以現在回想起來要是每天能來一篇,其實佔用的時間並不是那麼多,好,咋就先從策設計模式中的策略模式先講起吧,
在設計模式中,策略模式其實很好理解,簡單的來說,就是一個場景,一樣東西,一種操作,當然需要一定的條件來進行操作,有人這樣舉了一個很形象的列子,那就是錦嚢妙計的列子,話說劉備去江東取老婆,諸葛亮生怕劉備去招周瑜不快,然特意寫了三個妙計放進一個錦嚢裏,並有隨劉備江東而去的趙雲保管,並告知,如告急,可打開,每次一計即可,在這裏,可以很清晰的把這個策略模式的分工給劃分出來,即妙計是實實在在的,錦囊是用來裝妙計的,然,這妙計是由誰來操作執行呢,這就需要一個操作執行人,那就是趙雲,所以,在JAVA面向對象編程的語言中,首先我們以類的對象來劃分,首先,我們需要有相對的策略,即妙計,咋這裏我們想到來三個妙計,第一個是:一旦遇到事情不對,必留後面逃去,第二個,如果在江下遇到攔兵,需要在此處插入自己人~開道,第三個就是:如果在我們逃跑之前,被周瑜發現得早,就需要其猛將進行阻擊,好,妙計有了,然後呢,就是執行場景,這個場景就得根據上面的猜測情況來定了,在下來就是執行人,這裏毫不猶豫的是趙雲一猛也,唔,這些都有了,但是怎麼去執行呢,這裏就需要一個公共的接口,去操作了,感覺這裏列子還是講得蠻形象的,下面我就把相關的代碼給貼出來吧:
首先我們需要定一個公共執行的接口:
public interface IStrategy{
       public void operate(String getMethod);
}
上面接口定義了一個接口IStrategy,裏面聲明瞭一個方法,並帶了一個參數爲獲得其參數做相應的操作
 其次我們需要定義其相關的妙計:
妙計一:逃跑
public class Flee implements IStrategy{
        public void operate(String getMethod){
              String getStr = null;
              if(getMethod != null){
                          getStr = getMethod;
               }
               System.out.println("getMethod: " + getStr);
        }
}
 其實上面可以來個返回值,判斷是否真的想逃跑,否則什麼的,自己去加吧


妙計二: 放關口
public class PutMark implements IStrategy{
         public void operate(String getMethod){
                String getStr = null;
                if(getMethod != null){
                               getStr = getMethod;
                }
               System.out.println("getMethod: "+getStr);
         }
}


妙計三:阻擊追兵
public class BlockPursure implements IStrategy{
          public void operate(String getMethod){
                 String getStr = null;
                 if(getMethod != null){
                           getStr = getMethod;
                   }
                 System.out.println("getMethod: " + getStr);
           }
}


好了,以上執行方式有來,妙計也有了,接下來就是需要一個錦囊用來裝這些妙計
看好了,我們是怎麼來裝的呢:
public class PackageCoup{
           private IStrategy mIStrategy;
           private String info;
           public PackageCoup(){}
           public PackageCoup(String info){
                    this.info = info;
           } 
          public void exeOperateCoup{
                    this.mIStrategy.operate(info);
         }
}


OK,上面的錦囊我們做好了哦,並且把三個妙計也放了進去,這時候趙雲可以放心的陪劉備去江東取老婆了哦,說起取老婆,俺還是個單身哦,如果誰有意向,可與我聯繫,碰緣的話,咋還真能碰上一對去,哎,誰叫自己不是女生喜歡壞的那種男生呢,搞不懂現在的女生,哎,有誰能教我學壞的,我還真願意學習一番,只要能真正找到一個自己認爲還可以,並能共同去承擔與努力和相愛的女孩子,我真是感激不盡。話說遠了,咋還是談點近的吧,上面的妙計有了,錦囊有了,執行的命令方式有了,問題接下來它需要一定的條件由指定相關的人去執行,這個問題,咋不二話了,既然擔子在趙雲身上,肯定是趙雲去執行這樣的操作了羅,看下面的代碼:
public class ExePerson{
        private PackageCoup mPc;
        private String info;
        public static void main(String agrs[]){
                  System.out.println("遇到問題了: 周瑜起壞,快想辦法,打開第一張妙計,一看:快逃");
                  info = "flee";
                  mPc = new PackageCoup(new Flee(),info);
                  mPc.exeOpearteCoup(info);
                  System.out,println("----------第一個妙計用完了,來到江邊,看到前面有攔兵,快打開第二個妙計一看,直走,前面已經是我們的人了---------------------");
                  info = "putmark";
                  mPc = new PackageCoup(new PutMark(),info);
                  mPc.exeOpearteCoup(info);
                  System.out.println("-------順利通過來第二關,不好,有追兵,而且來勢洶洶,怎麼辦,快打開第三個妙計,一看,在前面山路口往小路直走,後面有關於對其阻擊-----------");
                  info = "blockpursure";
                  mPc = new PackageCoup(new BlockPursure(),info);
                  mPc.exeOperateCoup(info);
                  System.out.println("OK,三個妙計都用完了,要是再遇到問題咋辦,路上一直彷徨不安,幸運的事,最終安全的到達了");
         }
}

OK,上面就是趙雲通過妙計規則執行的過程,很好理解吧,今天我們就對其策略模式講到這裏,有什麼新的見解可以直接噴上來,並且歡迎討論。。。。

執行效果:

one:
this is for flee!
------------------------------
two
this is for putmark!
--------------------------------
three
this is for blockpursure!


發佈了81 篇原創文章 · 獲贊 65 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章