设计原则1:
找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。
换句话说,如果每次新的需求一来,都会使某方面的代码发生变化,那么你就可以确定,这部分的代码需要被抽出来,和其他稳定的代码有所区别。
设计原则2:
针对接口编程,而不是针对实现编程。
在新的设计中,鸭子的子类将使用接口(FlyBehavior与QuackBehavior)所表示的行为,所以实际的“实现”不会被绑死在鸭子的子类中。当某一种行为需要修改时,我们仅修改一次该行为所对应的行为类即可,而不用把每个使用该种行为的鸭子子类中的该行为代码都修改一遍。