策略接口A
class flyBySocket : flyBehavior
{
#region flyBehavior 成员
public void fly()
{
Console.WriteLine("I can fly by socket!");
}
#endregion
}
策略接口A的实现A
class flyByWater : flyBehavior
{
#region flyBehavior 成员
public void fly()
{
Console.WriteLine("i can fly by water");
}
#endregion
}
策略接口A的实现B
public void fly()
{
Console.WriteLine("my fly skill is normal!");
}
#endregion
}
策略接口A的实现C
策略接口B
public void quack()
{
Console.WriteLine("I can quack,but my voice is very small!");
}
#endregion
}
策略接口B的实现A
class cantQuack : quackBehavior
{
#region quackBehavior 成员
public void quack()
{
Console.WriteLine("I can't quack!");
}
#endregion
}
策略接口B的实现B
abstract class duck
{
protected flyBehavior _flyBehavior;
protected quackBehavior _quackBehavior;
public abstract void display();
public void fly()
{
_flyBehavior.fly();
}
public void quack()
{
_quackBehavior.quack();
}
}
策略调用者抽象
class MachinalDuck:duck
{
public MachinalDuck(flyBehavior flyBehavior, quackBehavior quackBehavior)
{
base._flyBehavior = flyBehavior;
base._quackBehavior = quackBehavior;
}
public override void display()
{
Console.WriteLine("Im a beautiful MachinalDuck!!!");
}
}
策略调用者A
策略调用者B
namespace DesignPattern
{
class Program
{
static void Main(string[] args)
{
//flyBehavior flyBehav = new flyBySocket();
flyBehavior flyBehav = new flyByWater();
quackBehavior quackBehav = new cantQuack();
duck MachinalDuck = new MachinalDuck(flyBehav, quackBehav);
MachinalDuck.display();
MachinalDuck.fly();
MachinalDuck.quack();
//flyBehav = new NormalFly();
//quackBehav = new NormalQuack();
//duck normalDuck = new NormalDuck(flyBehav, quackBehav);
//normalDuck.display();
//normalDuck.fly();
//normalDuck.quack();
Console.ReadKey();
}
}
}
调用者