Java 实现策略模式

   最近因为工作上的需求研究了一下策略者模式,所以写了个实例,下面是思想图:


主要的思想是多用组合少用继承,将行为抽象出来成对象。

下面是代码:

1.CelueModule

/*** Created by saicy on 2017/3/31.*/
public class CelueModule {public static void main(String[] args) {Duck duck = new RedDuck(new FlyWay(),new Quack());duck.fly();duck.quak();Duck duck2 = new RubberDuck(new FlyNoWay(),new SQuack());duck2.fly();duck2.quak();}
}

2.Duck

/*** 鸭子类(策略模式)* Created by saicy on 2017/3/31.*/
public abstract class Duck {//将鸭子的飞行行为封装起来,使用组合的来实现,这样的话会比较灵活。private   FlyBehavior flyBehavior;//将鸭子的叫声行为封装起来,使用组合的方式来实现,这样的话会比较灵活。private  QuakBehavior quakBehavior;public abstract void fly();public abstract void quak();
}
3.FlyBehavior

/*** 飞行接口* Created by saicy on 2017/3/31.*/
public interface FlyBehavior {public void fly();
}
4.FlyNoWay

/*** 实现飞行接口的不会飞类* Created by saicy on 2017/3/31.*/
public class FlyNoWay implements FlyBehavior {@Overridepublic void fly() {System.out.println("不会飞!");}
}
5.FlyWay

/*** 实现飞行的能飞接口* Created by saicy on 2017/3/31.*/public class FlyWay implements  FlyBehavior{@Overridepublic void fly() {System.out.println("实现鸭子的飞行!");}}

6.Quack

/*** Created by saicy on 2017/3/31.*/
public class Quack implements QuakBehavior{@Overridepublic void quak() {System.out.println("呱呱叫!");}
}

7.QuakBehavior

/*** 鸭子叫声动作* Created by saicy on 2017/3/31.*/
public interface QuakBehavior {void quak();
}
8.RedDuck

/*** 红头鸭* Created by saicy on 2017/3/31.*/
public class RedDuck extends Duck {//将鸭子的飞行行为封装起来,使用组合的来实现,这样的话会比较灵活。private   FlyBehavior flyBehavior;//将鸭子的叫声行为封装起来,使用组合的方式来实现,这样的话会比较灵活。private  QuakBehavior quakBehavior;public RedDuck(FlyBehavior flyBehavior, QuakBehavior quakBehavior) {super();this.flyBehavior = flyBehavior;this.quakBehavior = quakBehavior;}public FlyBehavior getFlyBehavior() {return flyBehavior;}public void setFlyBehavior(FlyBehavior flyBehavior) {this.flyBehavior = flyBehavior;}public QuakBehavior getQuakBehavior() {return quakBehavior;}public void setQuakBehavior(QuakBehavior quakBehavior) {this.quakBehavior = quakBehavior;}@Overridepublic void fly() {flyBehavior.fly();}@Overridepublic void quak() {quakBehavior.quak();}
}
10.RubberDuck

public class RubberDuck extends Duck {//将鸭子的飞行行为封装起来,使用组合的来实现,这样的话会比较灵活。private   FlyBehavior flyBehavior;//将鸭子的叫声行为封装起来,使用组合的方式来实现,这样的话会比较灵活。private  QuakBehavior quakBehavior;public RubberDuck(FlyBehavior flyBehavior, QuakBehavior quakBehavior) {super();this.flyBehavior = flyBehavior;this.quakBehavior = quakBehavior;}public FlyBehavior getFlyBehavior() {return flyBehavior;}public void setFlyBehavior(FlyBehavior flyBehavior) {this.flyBehavior = flyBehavior;}public QuakBehavior getQuakBehavior() {return quakBehavior;}public void setQuakBehavior(QuakBehavior quakBehavior) {this.quakBehavior = quakBehavior;}@Overridepublic void fly() {flyBehavior.fly();}@Overridepublic void quak() {quakBehavior.quak();}
}

11.SQuack

/*** 橡皮鸭叫* Created by saicy on 2017/3/31.*/
public class SQuack implements QuakBehavior{@Overridepublic void quak() {System.out.println("橡皮鸭叫");}
}


下面是输出结果:



本代码是本人原创,谢谢大家的支持!~





本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部