Stragegy Pattern(策略模式)应用之"鸭子类" (C#源代码)

 
  1. using System;
  2. using System.Text;
  3. namespace NMDuck
  4. {
  5.     public class CRunMain
  6.     {
  7.         public static int Main()
  8.         {
  9.             //normal duck
  10.             CDuck objDuck = new CMallardDuck();
  11.             objDuck.Display();
  12.             objDuck.PerformFly();
  13.             objDuck.PerformQuack();
  14.             //set for model duck;
  15.             objDuck = new CModelDuck();
  16.             objDuck.PerformFly();
  17.             objDuck.SetFlyBehavior(new CFlyRocketPowered());
  18.             objDuck.PerformFly();
  19.             return 0;
  20.         }
  21.     }
  22.     public abstract class CDuck
  23.     {
  24.         public abstract void Display();
  25.         public void PerformFly()
  26.         {
  27.             this.m_objFly.Fly();
  28.         }
  29.         public void PerformQuack()
  30.         {
  31.             this.m_objQuack.Quack();
  32.         }
  33.         public void Swim()
  34.         {
  35.             Console.WriteLine("All ducks float, even decoys!");
  36.         }
  37.         public void SetFlyBehavior(IFlyBehavior objFly)
  38.         {
  39.             this.m_objFly = objFly;
  40.         }
  41.         public void SetQuackBehavior(IQuackBehavior objQuack)
  42.         {
  43.             this.m_objQuack = objQuack;
  44.         }
  45.         protected IQuackBehavior m_objQuack;
  46.         protected IFlyBehavior m_objFly;
  47.     };
  48.     public class CMallardDuck:CDuck
  49.     {
  50.         public CMallardDuck()
  51.         {
  52.             this.m_objFly = new CFlyWithWings();
  53.             this.m_objQuack = new CQuack();
  54.         }
  55.         public override void Display()
  56.         {
  57.             Console.WriteLine("i am CMallardDuc");
  58.         }
  59.     }
  60.     public class CModelDuck:CDuck
  61.     {
  62.         public CModelDuck()
  63.         {
  64.             this.m_objFly = new CFlyNoway();
  65.             this.m_objQuack = new CQuack();
  66.         }
  67.         public override void Display()
  68.         {
  69.             Console.WriteLine("I am CModelDuck");
  70.         }
  71.     }
  72.     public interface IQuackBehavior
  73.     {
  74.         void Quack();
  75.     }
  76.     public class CQuack:IQuackBehavior
  77.     {
  78.         //IQuackBehavior Members
  79.         public void Quack()
  80.         {
  81.             Console.WriteLine("quack!");
  82.         }
  83.     }
  84.     public class CMuteQuack:IQuackBehavior
  85.     {
  86.         //IQuackBehavior Members
  87.         public void Quack()
  88.         {
  89.             Console.WriteLine("Silence!");
  90.         }
  91.     }
  92.     public class CSqueak: IQuackBehavior
  93.     {
  94.         //IQuackBehavior Members
  95.         public void Quack()
  96.         {
  97.             Console.WriteLine("Squeak!");
  98.         }
  99.     }
  100.     public interface IFlyBehavior
  101.     {
  102.         void Fly();
  103.     }
  104.     public class CFlyWithWings:IFlyBehavior
  105.     {
  106.         //IFlyBehavior
  107.         public void Fly()
  108.         {
  109.             Console.WriteLine("I am flying!");
  110.         }
  111.     }
  112.     public class CFlyNoway:IFlyBehavior
  113.     {
  114.         //IFlyBehavior
  115.         public void Fly()
  116.         {
  117.             Console.WriteLine("I can't fly!");
  118.         }
  119.     }
  120.     
  121.     public class CFlyRocketPowered: IFlyBehavior
  122.     {
  123.         // IFlyBehavior Members
  124.         public void Fly()
  125.         {
  126.             Console.WriteLine("I am flying with a rocket!");
  127.         }
  128.     }
  129. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值