首页 > 代码库 > 策略模式学习2---原理
策略模式学习2---原理
虽然使用继承可以满足现在各种的需求但是当客户的要求改变的时候我们一旦改变了超类的一些东西将会影响到子类中的许多东西;
继承的问题:
对超类的局部改变会影响其他部分。会有影响溢出的问题存在。
所以在超类里面如果挖个坑,在子类继承的时候就会出现许多需求问题,这些坑都需要我们自己去填。为了开发的工作量的减少我们就需要使用我们的OO设计原则了、
当我遇到一个新的项目的时候我应该考虑这些问题来解决我的项目:
需要新的设计方式来满足项目的扩展性;降低复杂程度:
分析项目的变化部分和不变部分提取变化的部分,抽象成接口然后实现它。在编程的时候我们要面对接口的实现编程不要面对实现当下编程、
使用接口来实现鸭子的飞行接口来解决鸭子不断需求的新变化;
所以我们在超类中加入一些新的接口:
public interface FlyBehavior{
void fly();
}
//加入了飞行的接口
public interface QuackBehavior{
void quack();
}
//加入了叫的接口
这样的好处是:使用了组合增加了代码的复用,同时解决了继承带来单一的困扰,在我们需要的时候只需要从这些组合中去继承这些东西实现接口就可以解决这个问题、
重新设计鸭子项目:
public abstract class Duck{
FlyBehavior mFlyBehavior;
QuackBehavior mQuackBehavior;
public Duck(){} //让子类可以自己选择自己的行为
public void Fly(){
mFlyBehavior.fly();
}
public void Quack(){
mQuackBehavior,quack();
}
public abstract void display();
}
紧接我们就可以让我们的别的鸭子来继承这个Duck类这样我们来看看下面的代码;
public class GreenHeadDuck extends Duck{
public GreenHeadDuck(){
mFlyBehavior=new GoodFlybehavior();
mQuackBehavior=new GaGaQuackBehavior();
}
public void display(){}
}
}
策略模式:
分别封装行为为接口,实现算法族,超类里面放行为接口对象,在子类里面设定具体的行为对象。
原则:分离变化的部分,封装接口,基于接口编程各种功能,此模式让行为的算法的变化独立于算法的使用者。
策略模式学习2---原理