策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

    策略模式的好处在于你可以动态的改变对象的行为。 设计原则是把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口(c#中可以用抽象类),然后在类中包含这个对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类的行为。下面是一个例子。

Code
    /**//*
    这是一个表现僧人和道士的程序,僧人光头,使用棍子做武器,道士长小胡子,使用拂尘作武器 
    
*/ 
    
    
//处理长相接口 
    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 : LooksBehavier 
  { 
    
public void Display() //实现接口函数 
    { 
      Console.WriteLine(
"I'm a taolist with long white goatee"); 
    } 
  } 
  
  
//和尚长相类,实现了长相接口 
  class BonzeBehavier : LooksBehavier 
  { 
    
public void Display() //实现接口函数 
    { 
      Console.WriteLine(
"I'm a Bonze with no hair"); 
    } 
  } 
  
  
//道士武器类,实现了处理武器接口 
  class TaoistWeapon : WeaponBehavier 
  { 
    
public void UseWeapon() //实现了处理武器接口函数 
    { 
      Console.WriteLine(
"My weapon is horsetail whisk");; 
    } 
  } 
  
  
//和尚武器类,实现了处理武器接口 
  class BonzeWeapon : WeaponBehavier 
  { 
    
public void UseWeapon() //实现了处理武器接口函数 
    { 
      Console.WriteLine(
"My weapon is truncheon");; 
    } 
  } 
  
  
//道士 
  class Taoist : Role 
  { 
    
public Taoist() 
    { 
      looks 
= new TaoistBehavier(); 
      weapon 
= new TaoistWeapon(); 
    } 
  } 
  
  
//和尚 
  class Bonze : Role 
  { 
    
public Bonze() 
    { 
     looks 
= new BonzeBehavier(); 
     weapon 
= new BonzeWeapon(); 
    } 
    
public void ChangeWeapon() 
    { 
      weapon 
= new TaoistWeapon(); 
      Console.WriteLine(
"change weapon"); 
    } 
  } 
  
  
public class RoleBase{ 
    
public static void Main(String[] args) 
    { 
      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

 

相关文章:

  • 2022-01-01
  • 2021-10-01
  • 2021-07-03
  • 2022-01-04
  • 2021-07-12
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2017-12-22
  • 2021-07-25
  • 2021-06-04
  • 2022-12-23
  • 2022-12-23
  • 2021-10-13
相关资源
相似解决方案