设计原则一:找出应用中可能需要变化之处,把他们独立出来,不要把他们和不需变化的代码混在一起。这样可以很容易的改动或者封装需要变化的部分; 设计原则二:针对接口编程;而不是针对实现编程。 下边是c#代码的实现: public interface IFlyBehavior { void Fly(); } public interface IQuackBehavior { void Quack(); } class FlyNoWay : IFlyBehavior { public void Fly() { Console.WriteLine("FlyNoWay"); } } class FlyWithWings : IFlyBehavior { public void Fly() { Console.WriteLine("FlyWithWings"); } } class MuteQuack : IQuackBehavior { public void Quack() { Console.WriteLine("MuteQuack"); } } class Quacks : IQuackBehavior { public void Quack() { Console.WriteLine("Quacks"); } } class RockerPowerBehavior : IFlyBehavior { public void Fly() { Console.WriteLine("RockerPowerBehavior"); } } class Spueak : IQuackBehavior { public void Quack() { Console.WriteLine("Spueak"); } } public abstract class Duck { public IFlyBehavior flyBehavior; public IQuackBehavior quackBehavior; public Duck() { } public void PerformFly() { flyBehavior.Fly(); } public void PerformBehavior() { quackBehavior.Quack(); } public abstract void Display(); public void Swim() { Console.WriteLine("鸭子都会游泳。"); } public void SetFly(IFlyBehavior flyBehavior) { this.flyBehavior = flyBehavior; } public void SetQuack(IQuackBehavior quackBehavior) { this.quackBehavior = quackBehavior; } } class MarllarDuck : Duck { public MarllarDuck() { flyBehavior = new FlyWithWings(); quackBehavior = new Quacks(); } public override void Display() { Console.WriteLine("I am a Real Marllar Duck"); } } class ModelDuck : Duck { public ModelDuck() { this.flyBehavior = new FlyNoWay(); this.quackBehavior = new MuteQuack(); } public override void Display() { Console.WriteLine("I am a Model Duck."); } } class Program { static void Main(string[] args) { //MarllarDuck marllarDuck = new MarllarDuck(); //marllarDuck.Display(); //marllarDuck.PerformBehavior(); //marllarDuck.PerformFly(); //marllarDuck.Swim(); Duck duck1 = new ModelDuck(); duck1.PerformFly(); duck1.SetFly(new RockerPowerBehavior()); duck1.PerformFly(); Console.Read(); } }