您的位置:首页 > 其它

策略模式

2015-11-03 15:39 197 查看
  定义:定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

  1、找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。(把会变化的部分取出并“封装”起来,好让其他部分不会受到影响)

  2、针对接口编程,而不是针对实现编程。(行为将被放在分开的类中,此类专门提供某行为接口实现,这样超类就不在需要知道行为的实现细节)在不涉及java interface的情况下,“针对接口编程”,关键就在多态。
  3、多用组合,少用继承。(“有一个”可能比“是一个”更好)

package com.duck;

public abstract class flybehavior {
public abstract void fly();
}

package com.duck;

public class flynoway extends flybehavior {

@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("can not fly");
}

}

package com.duck;

public class flywithwings extends flybehavior {

@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("fly with wings");
}

}

package com.duck;

public abstract class quackbeh {
public abstract void  quack();
}

package com.duck;

public class guguquack extends quackbeh {

@Override
public void quack() {
// TODO Auto-generated method stub
System.out.println("gugu~~");
}

}

package com.duck;

public class mutequack extends quackbeh {

@Override
public void quack() {
// TODO Auto-generated method stub
System.out.println("~~");
}

}

package com.duck;

public class squack extends quackbeh {

@Override
public void quack() {
// TODO Auto-generated method stub
System.out.println("zhizhi~~");
}

}

package com.duck;

public abstract class duck {
private flybehavior fb;
private quackbeh qb;

public flybehavior getFb() {
return fb;
}

public void setFb(flybehavior fb) {
this.fb = fb;
}

public quackbeh getQb() {
return qb;
}

public void setQb(quackbeh qb) {
this.qb = qb;
}

public abstract void display();

public void performFly(){
fb.fly();
}

public void performQuack(){
qb.quack();
}
}

package com.duck;

public class muteduck extends duck {

public muteduck(){
this.setFb(new flywithwings());
this.setQb(new mutequack());
}

@Override
public void display() {
// TODO Auto-generated method stub
System.out.println("no quack~~");
}

}

package com.duck;

public class initial {

public static void main(String[] args) {
// TODO Auto-generated method stub
duck dk = new muteduck();
dk.performFly();
dk.performQuack();
dk.display();

dk.setFb(new flynoway());
dk.performFly();
dk.performQuack();
dk.display();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: