策略模式

来源:互联网 发布:彗星dns优化 编辑:程序博客网 时间:2024/05/16 14:13
java中的类只能实现单继承(即一个孩子只能有一个亲生父亲,但一个父亲可以有多个儿子),类的继承可以提高代码的复用性,但子类实现的方法若和从父类中继承的方法不一致,则需重写,不同的类越多,则需要重写的父类方法就越多,这样就会导致代码的可复用性降低。策略模式可以很好的解决这一问题,将超类与子类中共同拥有的方法放入抽象类,不同的方法做成接口+实现例:package cn.test;

/*
* 策略模式,应对项目的扩展性,降低复杂度:
1)分析项目变化与不变部分,提取变化部分,抽象成接口+实现;
2)鸭子哪些功能是会根据新需求变化的?叫声、飞行…
*/
//变化部分
interface FlyBehavior {
void fly();
}

interface QuackBehavior{
void quack();
}

package cn.test;
//Duck为父类

public abstract class Duck {
FlyBehavior mFlyBehavior;
QuackBehavior mQuackBehavior;
public Duck() {

}
public void dFly(){
mFlyBehavior.fly();
}

public void dQuack(){
mQuackBehavior.quack();
}

public abstract void disPlay();
}

//子类1
public class BlueDuck extends Duck{
public BlueDuck() {
mFlyBehavior=new BadFly();
mQuackBehavior=new BadQuack();
}

@Overridepublic void disPlay() {    System.out.println("BuleHead");}

}
//子类2
package cn.test;

public class RedDuck extends Duck{

public RedDuck() {    mFlyBehavior=new GoodFly();    mQuackBehavior=new GoodQuack();}@Overridepublic void disPlay() {    System.out.println("RedHead");}

}

0 0
原创粉丝点击