设计模式真香笔记-策略模式

策略模式的定义

定义了一系列算法,分别封装起来,让它们之间可以互相替换,让算法的变化独立于使用他们的客户

利用到的设计模式原则

  • 找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起
  • 针对接口编程,而不是针对实现编程
  • 多用组合少用继承

UML类图
鸭子论
实现代码

  • Duck.java (鸭子抽象类)
package duck;

/**
 * 鸭子论之实现
 *
 * @author hjsjy
 * @create 2018/10/9
 * @since 1.0.0
 */
public abstract class Duck {
    Flybehavior flybehavior;
    Quackbehavior quackbehavior;

    public void setQuackbehavior(Quackbehavior quackbehavior) {
        this.quackbehavior = quackbehavior;
    }

    public void setFlybehavior(Flybehavior flybehavior) {
        this.flybehavior = flybehavior;
    }
    public void PeformFly(){
        flybehavior.fly();
    }
    public void PerformQuack(){
        quackbehavior.quack();
    }
    public void swim(){
        System.out.println("我可以游泳!");
    }
    public abstract  void display();
}

  • Flybehavior.java (飞行行为接口)
public interface Flybehavior {
    void fly();
}
  • 飞行行为接口实现
public class FlyNoWay implements Flybehavior {

    @Override
    public void fly() {
        System.out.println("不能飞!!!!!!");
    }
}
  • 飞行行为接口实现
 */
public class FlyOnSky implements Flybehavior {

    @Override
    public void fly() {
        System.out.println("在天上飞!!!!!!!");
    }
}
  • Quackbehavior.java (鸭叫行为接口)
public interface Quackbehavior {
     void quack();
}

  • AQuack.java(鸭叫行为实现)
public class AQuack implements Quackbehavior {

    @Override
    public void quack() {
        System.out.println("嘎嘎嘎!!!!!!!!!");
    }
}
  • NoQuack(鸭叫行为实现)
public class NoQuack implements Quackbehavior {

    @Override
    public void quack() {
        System.out.println("没有声音!!!!!!!!");
    }
}
  • HjsjyDuck.java(实现鸭子抽象类)
public class HjsjyDuck extends  Duck {
    public HjsjyDuck(){
        flybehavior=new FlyOnSky();
        quackbehavior=new AQuack();
    }
    @Override
    public void display() {
        System.out.println("我是一直会游泳,会飞并且会嘎嘎嘎的鸭子!!!!!!!!!");
    }
}
  • DuckTest.java(鸭子测试类)
public class DuckTest {
    public static void main(String[] args) {
        Duck hjsjyDuck = new HjsjyDuck();
        hjsjyDuck.display();
        hjsjyDuck.swim();
        hjsjyDuck.PeformFly();
        hjsjyDuck.PerformQuack();
        hjsjyDuck.setFlybehavior(new FlyNoWay());
        hjsjyDuck.PeformFly();
    }
}

输出结果
输出结果


本文参考 :《Head First 设计模式》

猜你喜欢

转载自blog.csdn.net/hj1997a/article/details/82986738