- using System;
- using System.Text;
- namespace NMDuck
- {
- public class CRunMain
- {
- public static int Main()
- {
- //normal duck
- CDuck objDuck = new CMallardDuck();
- objDuck.Display();
- objDuck.PerformFly();
- objDuck.PerformQuack();
- //set for model duck;
- objDuck = new CModelDuck();
- objDuck.PerformFly();
- objDuck.SetFlyBehavior(new CFlyRocketPowered());
- objDuck.PerformFly();
- return 0;
- }
- }
- public abstract class CDuck
- {
- public abstract void Display();
- public void PerformFly()
- {
- this.m_objFly.Fly();
- }
- public void PerformQuack()
- {
- this.m_objQuack.Quack();
- }
- public void Swim()
- {
- Console.WriteLine("All ducks float, even decoys!");
- }
- public void SetFlyBehavior(IFlyBehavior objFly)
- {
- this.m_objFly = objFly;
- }
- public void SetQuackBehavior(IQuackBehavior objQuack)
- {
- this.m_objQuack = objQuack;
- }
- protected IQuackBehavior m_objQuack;
- protected IFlyBehavior m_objFly;
- };
- public class CMallardDuck:CDuck
- {
- public CMallardDuck()
- {
- this.m_objFly = new CFlyWithWings();
- this.m_objQuack = new CQuack();
- }
- public override void Display()
- {
- Console.WriteLine("i am CMallardDuc");
- }
- }
- public class CModelDuck:CDuck
- {
- public CModelDuck()
- {
- this.m_objFly = new CFlyNoway();
- this.m_objQuack = new CQuack();
- }
- public override void Display()
- {
- Console.WriteLine("I am CModelDuck");
- }
- }
- public interface IQuackBehavior
- {
- void Quack();
- }
- public class CQuack:IQuackBehavior
- {
- //IQuackBehavior Members
- public void Quack()
- {
- Console.WriteLine("quack!");
- }
- }
- public class CMuteQuack:IQuackBehavior
- {
- //IQuackBehavior Members
- public void Quack()
- {
- Console.WriteLine("Silence!");
- }
- }
- public class CSqueak: IQuackBehavior
- {
- //IQuackBehavior Members
- public void Quack()
- {
- Console.WriteLine("Squeak!");
- }
- }
- public interface IFlyBehavior
- {
- void Fly();
- }
- public class CFlyWithWings:IFlyBehavior
- {
- //IFlyBehavior
- public void Fly()
- {
- Console.WriteLine("I am flying!");
- }
- }
- public class CFlyNoway:IFlyBehavior
- {
- //IFlyBehavior
- public void Fly()
- {
- Console.WriteLine("I can't fly!");
- }
- }
- public class CFlyRocketPowered: IFlyBehavior
- {
- // IFlyBehavior Members
- public void Fly()
- {
- Console.WriteLine("I am flying with a rocket!");
- }
- }
- }
Stragegy Pattern(策略模式)应用之"鸭子类" (C#源代码)
最新推荐文章于 2025-05-27 09:41:42 发布