1 public interface FlyBehavior 2 { 3 void Fly(); 4 } 5 6 class FlyWithWings:FlyBehavior 7 { 8 #region FlyBehavior 成员 9 10 public void Fly()11 {12 Console.WriteLine("会飞的鸭子");13 }14 15 #endregion16 }17 18 public class FlyNoWay:FlyBehavior19 {20 #region FlyBehavior 成员21 22 public void Fly()23 {24 Console.WriteLine("飞不起来的");25 }26 27 #endregion28 }
1 public interface QuackBehavior 2 { 3 void Quack(); 4 } 5 6 class Quack:QuackBehavior 7 { 8 #region QuackBehavior 成员 9 10 void QuackBehavior.Quack()11 {12 Console.WriteLine("嘎!嘎!嘎!");13 }14 15 #endregion16 }17 18 class MuteQuack:QuackBehavior19 {20 #region QuackBehavior 成员21 22 public void Quack()23 {24 Console.WriteLine("世界一片安静");25 }26 27 #endregion28 }
1 public abstract class Duck 2 { 3 //将鸭子的行为通过组合的方式使用,而不是继承 4 FlyBehavior _flyBehavior; 5 QuackBehavior _quackBehavior; 6 7 public FlyBehavior FlyBehavior 8 { 9 set { _flyBehavior = value; }10 }11 12 public QuackBehavior QuackBehavior13 {14 set { _quackBehavior = value; }15 }16 17 public abstract void Display();18 19 public void PerformFly()20 {21 _flyBehavior.Fly();22 }23 public void PerformQuack()24 {25 _quackBehavior.Quack();26 }27 }
1 class RedheadDuck:Duck2 {3 public override void Display()4 {5 Console.WriteLine("红头鸭");6 }7 }
1 class Program 2 { 3 static void Main(string[] args) { 4 Duck duck = new RedheadDuck() { 5 FlyBehavior=new FlyWithWings(), 6 QuackBehavior=new Quack() 7 }; 8 duck.Display(); 9 duck.PerformFly();10 duck.PerformQuack();11 12 Console.ReadKey();13 }14 }