设计模式-策略模式
策略模式测试类
*策略模式:分别封装行为接口,实现算法组,超类里放行为接口对象,在子类里
*具体设行为对象。原则是:分离变化部分,封装接口,基于接口编程的各种功能
*此模式让行为算法的变化独立于算法使用者
定义行为接口以及实现
package cn.china.interfaces;
/**
* 飞行接口
* @author yxq
*
*/
public interface FlyBehavior {
public void fly();
}
package cn.china.interfaces;
/**
* 叫声接口
* @author yxq
*
*/
public interface QuackBehavior {
public void quack();
}
=======================================以下是实现类================================================
package cn.china.impls;
import cn.china.interfaces.FlyBehavior;
public class BadFlyBehavior implements FlyBehavior{
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("--BadFly--");
}
}
package cn.china.impls;
import cn.china.interfaces.QuackBehavior;
/**
* 叫声的具体实现
* @author yxq
*
*/
public class GAGAQuackBehavior implements QuackBehavior{
@Override
public void quack() {
// TODO Auto-generated method stub
System.out.println("--gagaDauck--");
}
}
定义抽象类Dunck
package cn.china.extendss;
import cn.china.interfaces.FlyBehavior;
import cn.china.interfaces.QuackBehavior;
/**
* 鸭子抽象类
* @author yxq
*
*/
public abstract class Duck {
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
public Duck() {}
public void Fly() {
flyBehavior.fly();
}
public void Quack() {
quackBehavior.quack();
}
public void setFly(FlyBehavior fb) {
this.flyBehavior = fb;
}
public void setQuack(QuackBehavior qb) {
this.quackBehavior = qb;
}
public abstract void display();
}
定义抽象类Dunck实现
package cn.china.extendss;
import cn.china.impls.BadFlyBehavior;
import cn.china.impls.GAGAQuackBehavior;
/**
* 实现类
*/
public class GreenHeadDuck extends Duck{
public GreenHeadDuck() {
flyBehavior = new BadFlyBehavior();
quackBehavior = new GAGAQuackBehavior();
}
@Override
public void display() {
// TODO Auto-generated method stub
System.out.println("--GreenHeadDuck--");
}
}
========================================================================================
package cn.china.extendss;
import cn.china.impls.BadFlyBehavior;
import cn.china.impls.GAGAQuackBehavior;
public class RedHeadDuck extends Duck{
public RedHeadDuck() {
flyBehavior = new BadFlyBehavior();
quackBehavior = new GAGAQuackBehavior();
}
@Override
public void display() {
// TODO Auto-generated method stub
System.out.println("--RedHeadDuck--");
}
}
测试类
package cn.china.test;
import cn.china.extendss.Duck;
import cn.china.extendss.GreenHeadDuck;
import cn.china.extendss.RedHeadDuck;
/**
* 策略模式测试类
* @author yxq
*策略模式:分别封装行为接口,实现算法组,超类里放行为接口对象,在子类里
*具体设行为对象。原则是:分离变化部分,封装接口,基于接口编程的各种功能
*此模式让行为算法的变化独立于算法使用者
*/
public class ClmsTest {
public static void main(String[] args) {
Duck greenDuck = new GreenHeadDuck();
greenDuck.display();
greenDuck.Quack();
greenDuck.Fly();
Duck redDuck = new RedHeadDuck();
redDuck.display();
redDuck.Quack();
redDuck.Fly();
}
}