如何设计一个鸭子基类,并且后代可以不同的飞行模式和叫声
策略模式定义:
用接口将Fly和Quack两个动作抽离出来,然后有各种实现类,对于具体的应用各种实现类
完整代码
namespace Quck
{
public class Duck
{
public IFlyBehavior _iflybehavior;
public IQuackBehavior _quackBehavior;
public void Display()
{
Console.WriteLine("我是基类");
}
public void PerFormQuack()
{
_quackBehavior.Quack();
}
public void PerFormFly()
{
_iflybehavior.Fly();
}
}
public interface IFlyBehavior
{
void Fly();
}
public class FlyWithWings :IFlyBehavior
{
public void Fly()
{
Console.WriteLine("我正在飞");
}
}
public class FlyNoWay : IFlyBehavior
{
public void Fly()
{
Console.WriteLine("我不会飞啊~~");
}
}
public interface IQuackBehavior
{
void Quack();
}
public class SayQuack :IQuackBehavior
{
public void Quack()
{
Console.WriteLine("呱呱");
}
}
public class SayZhiZhi : IQuackBehavior
{
public void Quack()
{
Console.WriteLine("吱吱");
}
}
public class MuteQuack :IQuackBehavior
{
public void Quack()
{
Console.WriteLine(".....");
}
}
public class MallardDuck :Duck
{
public MallardDuck(FlyWithWings flyWithWings,SayZhiZhi sayZhiZhi)/*12312412424212**/
{
_iflybehavior=flyWithWings;
_quackBehavior=sayZhiZhi;
}
}
}