策略模式
Posted lansegediao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了策略模式相关的知识,希望对你有一定的参考价值。
背景介绍:
/**策略设计模式的原理解释:
duck 类(固定不变有叫与显示的方法)作为基类是变化很少的封装出来
而可变的就以组合的方式(注入接口) 然后通过多态的实现来完成。
这样以后还需要增加不同类型的鸭子以及不同的飞行就不需要改变原有duck的代码以及之前写好的代码
*/
public abstract class Duck { // 鸭子类 //因为每个鸭子的模样是不一样的。如:塑料鸭,灰鸭 public abstract void display(); //面向接口编程,使用组合的方式注入fly 采用开闭原则(原有的系统只做新增不做修改) private Fly fly; public Fly getFly() { return fly; } public void setFly(Fly fly) { this.fly = fly; } public void quack() { System.out.println("呱"); } }
public class MallardDuck extends Duck { //绿头鸭 public MallardDuck() { super(); super.setFly(new FlyNoWay());//传入对应对应的飞行实现类 ???直接set 一个实现类?没看懂这写法 } public void display() { System.out.println("绿头鸭"); } } public class RedHeadDuck extends Duck { //红头鸭 public RedHeadDuck() { super(); super.setFly(new RocketFly());//注入不同的接口实现类 } public void display() { System.out.println("红头鸭"); } }
public interface Fly { //fly 接口 void fly(); } /** * 具体的策略算法实现类 * 具体的飞行实现类 */ public class FlyNoWay implements Fly { public void fly() { System.out.println("不会飞"); } } /** * 具体的策略算法实现类 * 具体的飞行实现类 */ public class RocketFly implements Fly { public void fly() { System.out.println("坐火箭"); } }
//测试 public static void main(String[] args) { /*** * 策略模式的理解 根据不同的方式 */ Duck duck = new MallardDuck(); duck.display(); duck.quack(); duck.getFly(); }
以上是关于策略模式的主要内容,如果未能解决你的问题,请参考以下文章