策略模式 2018-11-04

设计模式之策略模式

官方说明设计模式的3个角色:

  1. 环境角色:context , 持有一个策略的引用
  2. 抽象策略角色,是一个抽象角色,此角色给出所有的具体策略类所需的接口
  3. 具体策略角色,包装了相关的算法和行为。即抽象策略的具体实现

借图说明之间相互关系:

策略模式特点:

  • 重心不在于如何实现算法,在于如何组织、调用这些算法
  • 各个策略算法是相互独立、没有依赖、各个之间平等

案例:(写了一遍网上流行的真鸭子,假鸭子DUCK会不会飞的案例)
情景:
对象:真鸭子,石头鸭子,
能力:都会游泳(假如),真鸭子会飞,石头鸭子不会飞

策略实现:
 /**
   * 真鸭子,石头鸭子实现的抽象类
  */
public abstract class DUCK {
    /**
     * 持有一个Strategy的引用。即封装了接口鸭子飞这个行为接口
     */
    IFlyBehavior flyBehavior;
    void setFlyBehavior(IFlyBehavior fb) {
        flyBehavior = fb;
    }

    abstract void swim();

    public void fly() {
        flyBehavior.fly();
    }
}

石头鸭子和真鸭子实体类,继承抽象类DUCK

public class StoneDuck extends DUCK {
    public StoneDuck() {
        flyBehavior = new BadFlyBehavior();
    }

    @Override
    void swim() {
        System.out.println("******");
    }
}
public class RealDuck extends DUCK {
    public RealDuck() {
        flyBehavior = new GoodFlyBehavior();
    }

    @Override
    void swim() {
        System.out.println("*********");
    }
}

鸭子会飞这个能力的策略抽象接口:

/**
 * 给出所有的具体策略类所需的接口
 */
public interface IFlyBehavior {
    /**
     * 鸭子飞翔的动作
     */
    void fly();
}
public class GoodFlyBehavior implements IFlyBehavior {
    @Override
    public void fly() {
        System.out.println("****I can fly****");
    }
}
public class BadFlyBehavior implements IFlyBehavior {
    @Override
    public void fly() {
        System.out.println("***not fly***");
    }
}
public static  void  main(String[] args) {
        DUCK stoneDuck = new StoneDuck();
        stoneDuck.fly();

        // 改变策略
        stoneDuck.setFlyBehavior(new GoodFlyBehavior());
        stoneDuck.fly();

        /**
         * 打印结果:
         *
         * ***not fly***
         * ****I can fly****
         *
         */
    }

优秀策略模式文章:

JAVA与模式之策略模式
java 开发模式之一 : 策略模式

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 设计模式概述 在学习面向对象七大设计原则时需要注意以下几点:a) 高内聚、低耦合和单一职能的“冲突”实际上,这两者...
    彦帧阅读 3,897评论 0 14
  • 二十三种设计模式 - 策略模式 策略模式简介 模式动机 完成一项任务,往往可以有多种不同的方式,每一种方式称为一个...
    JustTheSame阅读 1,906评论 2 16
  • 本文参照《Head First 设计模式》,转载请注明出处对于整个系列,我们按照这本书的设计逻辑,使用情景分析的方...
    诡异的叶子阅读 724评论 0 5
  • 一.奇迹 1.实在没想到:三年前在美丽的朗措玛寺结的缘却是让我遇到了今生很重要的两个灵魂伴侣:珊珊和英子。分别两年...
    爱满虚空阅读 448评论 0 0
  • 上一章 目录 下一章 半个月之后,距离吴家村千里远的龙虎山脚下,一名年仅十七八岁的少年出现在此处。 正是不远千里来...
    努力飞奔的菜螺阅读 183评论 0 2

友情链接更多精彩内容