public interface FlyBehavior
{
String fly();
}
// 飞
public class FlyWithWing : FlyBehavior
{
public String fly()
{
return "正在用翅膀飞行
";}
}
// 不飞
public class FlyNoWay : FlyBehavior
{
public String fly()
{
return "不会飞";
}
}
quack行为
public interface QuackBehavior
{
String quack();
}
// 嘎嘎叫
public class Quack : QuackBehavior
{
public String quack()
{
return "嘎嘎叫
";}
}
// 吱吱叫
public class Squeak : QuackBehavior
{
public String quack()
{
return "吱吱叫
";}
}
// 不叫
public class MuteQuack : QuackBehavior
{
public String quack()
{
return "不会叫";
}
}
实现Duck类
public abstract class Duck
{
protected FlyBehavior flyBehavior;
protected QuackBehavior quackBehavior;
public Duck()
{
// 默认的行为
flyBehavior = new FlyWithWing();
quackBehavior = new Quack();
}
public String swim()
{
return "正在游泳
";}
public String performFly()
{
return flyBehavior.fly();
}
public String performQuack()
{
return quackBehavior.quack();
}
public void setFlyBehavior(FlyBehavior flyBehavior)
{
this.flyBehavior = flyBehavior;
}
public void setQuackBehavior(QuackBehavior quackBehavior)
{
this.quackBehavior = quackBehavior;
}
public abstract String display();
}
public class MallardDuck : Duck
{
public override String display()
{
return "绿头鸭";
}
}
// 红头鸭
public class RedHeadDuck : Duck
{
public override String display()
{
return "红头鸭";
}
}
// 橡皮鸭
public class RubberDuck : Duck
{
public override String display()
{
return "橡皮鸭";
}
}

{
txtMsg.AppendText(duck.display());
txtMsg.AppendText(duck.performFly());
txtMsg.AppendText(duck.performQuack());
}
private void btnStrategy_Click(object sender, EventArgs e)
{
txtMsg.Clear();
Duck duck = new MallardDuck();
printMsg(duck);
txtMsg.AppendText("\r\n");
duck = new RedHeadDuck();
duck.setQuackBehavior(new Squeak());
printMsg(duck);
txtMsg.AppendText("\r\n");
duck = new RubberDuck();
duck.setFlyBehavior(new FlyNoWay());
duck.setQuackBehavior(new MuteQuack());
printMsg(duck);
txtMsg.AppendText(duck.swim());
txtMsg.AppendText("\r\n");
}
输出结果如下:
嘎嘎叫
红头鸭正在用翅膀飞行
吱吱叫
橡皮鸭不会飞不会叫正在游泳

















