我的漫漫程序之旅

          專注于JavaWeb開發
          隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
          數據加載中……

          策略模式及實現

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

              策略模式的好處在于你可以動態的改變對象的行為。 設計原則是把一個類中經常改變或者將來可能改變的部分提取出來,作為一個接口(c++z中可以用虛類),然后在類中包含這個對象的實例,這樣類的實例在運行時就可以隨意調用實現了這個接口的類的行為。下面是一個例子。
          /* 
          這是一個表現僧人和道士的程序,僧人光頭,使用棍子做武器,道士長小胡子,使用拂塵作武器 
          */
           

          //處理長相接口 
          interface LooksBehavier 

            
          public void display(); 
          }
           
            
          //處理所使用的武器接口 
          interface WeaponBehavier 

           
          public void useWeapon(); 
          }
           

          //角色基類 
          class Role 
            
          public int heght; //身高 
            public int sex; //性別 
            public WeaponBehavier weapon; //處理武器接口的實例 
            public LooksBehavier looks; //處理長相的接口的實例 
            public void display() //顯示長相 
            
              looks.display(); 
            }


          public void weapon() //設置所使用的武器 

            weapon.useWeapon(); 
          }


          }
           

          //道士長相類,實現了長相接口 
          class TaoistBehavier implements LooksBehavier 

            
          public void display() //實現接口函數 

            System.out.println(
          "I'm a taolist with long white goatee"); 
          }
           

          }
           

          //和尚長相類,實現了長相接口 
          class BonzeBehavier implements LooksBehavier 

            
          public void display() //實現接口函數 
            
              System.out.println(
          "I'm a Bonze with no hair"); 
            }
           

          }
           

          //道士武器類,實現了處理武器接口 
          class TaoistWeapon implements WeaponBehavier 

            
          public void useWeapon() //實現了處理武器接口函數 
            
              System.out.println(
          "My weapon is horsetail whisk");; 
            }
           
          }
           

          //和尚武器類,實現了處理武器接口 
          class BonzeWeapon implements WeaponBehavier 

            
          public void useWeapon() //實現了處理武器接口函數 

            System.out.println(
          "My weapon is truncheon");; 
          }
           
          }
           

          //道士 
          class Taoist extends Role 

            
          public Taoist() 

            looks 
          = new TaoistBehavier(); 
            weapon 
          = new TaoistWeapon(); 
           }
           
          }
           

          //和尚 
          class Bonze extends Role 

            
          public Bonze() 
            

             looks 
          = new BonzeBehavier(); 
             weapon 
          = new BonzeWeapon(); 
            }
           
           
          public void changeWeapon() 

            weapon 
          = new TaoistWeapon(); 
            System.out.println(
          "change weapon"); 
           }
           
          }
           

          public class RoleBase
            
          public static void main(String [] arg) 
            

              Taoist taoistObj 
          = new Taoist(); 
              Bonze bonzeObj 
          = new Bonze(); 
              taoistObj.display(); 
              taoistObj.weapon(); 
              bonzeObj.display(); 
              bonzeObj.weapon(); 
              bonzeObj.changeWeapon(); 
          //改變和尚使用的武器 
              bonzeObj.weapon(); 
            }
           
          }
           


          輸出結果為:
          I'm a taolist with long white goatee 
          My weapon is horsetail whisk 
          I
          'm a Bonze with no hair 
          My weapon is truncheon 
          change weapon 
          My weapon is horsetail whisk 


          posted on 2008-03-07 09:39 々上善若水々 閱讀(755) 評論(0)  編輯  收藏 所屬分類: 數據結構與算法

          主站蜘蛛池模板: 临澧县| 长沙县| 包头市| 定州市| 怀柔区| 大丰市| 巴塘县| 永嘉县| 新建县| 汝南县| 重庆市| 长白| 左权县| 双江| 瑞安市| 曲沃县| 临潭县| 吐鲁番市| 津南区| 长顺县| 罗定市| 长丰县| 饶阳县| 蓬安县| 屏南县| 黄龙县| 怀化市| 孟连| 双流县| 庆元县| 惠东县| 葫芦岛市| 清苑县| 嘉禾县| 太保市| 额济纳旗| 大连市| 北流市| 鹤壁市| 长寿区| 乐亭县|