行为型模式-策略模式

2023-11-18

 

package per.mjn.pattern.strategy;

// 抽象策略类
public interface Strategy {

    void show();
}
package per.mjn.pattern.strategy;

// 具体策略类,用来封装算法
public class StrategyA implements Strategy {
    @Override
    public void show() {
        System.out.println("买一送一");
    }
}
package per.mjn.pattern.strategy;

// 具体策略类,用来封装算法
public class StrategyB implements Strategy {
    @Override
    public void show() {
        System.out.println("满200元减50元");
    }
}
package per.mjn.pattern.strategy;

// 具体策略类,用来封装算法
public class StrategyC implements Strategy {
    @Override
    public void show() {
        System.out.println("满1000元加一元换购任意200元以下商品");
    }
}
package per.mjn.pattern.strategy;

// 促销员(环境类)
public class SalesMan {

    // 聚合策略类对象
    private Strategy strategy;

    public SalesMan(Strategy strategy) {
        this.strategy = strategy;
    }

    // 由促销员展示促销活动给用户
    public void salesManShow() {
        strategy.show();
    }
}
package per.mjn.pattern.strategy;

public class Client {
    public static void main(String[] args) {
        // 春节来了,使用春节促销活动
        SalesMan salesMan = new SalesMan(new StrategyA());

        // 展示促销活动
        salesMan.salesManShow();
    }
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

行为型模式-策略模式 的相关文章

  • c++享元模式

    享元模式 1 享元模式简介 享元模式在 设计模式 可复用面向对象软件的基础 一书中是这样说的 运用共享技术有效地支持大量细粒度的对象 本质就是对大量细粒度的对象进行共享 不是每个对象都要通过new的方式去创建 而是通过区分对象的内部状态和外
  • 设计模式-单一职责原则介绍与理解

    描述 一个类应该专注于实现一个功能 好处 便于代码复用 举例 俄罗斯方块游戏 首先可以想到的是游戏逻辑与界面的分离 也就是说逻辑一个类 界面部分一个类 这样做的好处就是我们可以复用游戏逻辑的代码 例如我们用java写了一个基于PC端的俄罗斯
  • 设计模式三: 代理模式(Proxy) -- JDK的实现方式

    简介 代理模式属于行为型模式的一种 控制对其他对象的访问 起到中介作用 代理模式核心角色 真实角色 代理角色 按实现方式不同分为静态代理和动态代理两种 意图 控制对其它对象的访问 类图 实现 JDK自带了Proxy的实现 下面我们先使用JD
  • C++ 装饰器模式

    什么是装饰器模式 装饰器模式是一种结构型设计模式 实现了在不改变现有对象结构的的同时又拓展了新的功能 装饰器本质上是对现有对象的重新包装 同时装饰器又称为封装器 如何理解装饰器模式 以笔记本电脑为例 当我们购买了一台新笔记本电脑 但我们发现
  • 设计模式的 C++ 实现---工厂方法模式(二)

    前文回顾 单例模式 一 单例模式 二 观察者模式 简单工厂模式 工厂方法模式 一 前言 对于工厂方法模式 当增加新产品时 也需要对应增加一个工厂类 可以使用模版进行封装 减少代码工作量 实现举例 产品抽象基类 class Animal pu
  • 设计模式--组合模式

    组合模式 又叫部分整体模式 属于结构型模式 基本原理 以树形的结构将相似的对象组合起来 主要流程 1 创建对象 2 在对象中设置用来存放下一级相似对象的数据结构 3 在对象中设置增删改查等功能 注意 这种模式和数据结构中的树形结构相似 in
  • 简单工厂模式

    简单工厂模式 一 概念 从设计模式的类型上来说 简单工厂模式是属于创建型模式 又叫做静态工厂方法 StaticFactory Method 模式 但不属于23种GOF设计模式之一 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例 简
  • C++设计模式-State状态模式

    State状态模式作用 当一个对象的内在状态改变时允许改变其行为 这个对象看起来像是改变了其类 UML图如下 State类 抽象状态类 定义一个接口以封装与Context的一个特定状态相关的行为 ConcreteState类 具体状态 每一
  • 行为型模式-状态模式

    package per mjn pattern state after 环境角色类 public class Context 定义对应状态对象的常量 public final static OpeningState OPENING STAT
  • 设计模式——简单工厂模式

    简单工厂模式定义为 简单工厂模式又称为静态工厂方法模型 它属于类创建型模式 在简单工厂模式中 可以根据参数的不同返回不同类的实例 简单工厂专门定义一个类来负责创建其他类的实例 被创建的实例通常都具有共同的父类 简单工厂模式结构图 简单工厂模
  • 设计模式--Abstract server模式 VS Adapter 模式

    适配器类似于现实世界里面的插头 通过适配器 我们可以将分属于不同类的两种不同类型的数据整合起来 而不必去根据某一需要增加或者修改类里面的方法 Adapter mode和Proxymode的区别 Proxy的关注点是职能转移 通过引入Prox
  • 设计模式(十)装饰器模式

    装饰器模式是一种非常有用的结构型模式 它允许我们在不改变类的结果的情况下 为类添加新的功能 我们来举例说明一下 首先添加一组形状 它们都实现了形状接口 public interface Shape String getShape class
  • 设计模式(5)-适配器模式(Adapter Pattern)

    适配器模式 Adapter Pattern 顾名思义 就像变压器 转接头差不多 就像美国的生活电压是110V 中国是220V 就需要一个变压器将220V转换成110V 或者一个Type C接口想插如USB接口的东西 你就需要一个转换器 而这
  • 每日一问:你想如何破坏单例模式?

    前言 1 单例是什么 单例模式 是一种创建型设计模式 目的是保证全局一个类只有一个实例对象 分为懒汉式和饿汉式 所谓懒汉式 类似于懒加载 需要的时候才会触发初始化实例对象 而饿汉式正好相反 项目启动 类加载的时候 就会创建初始化单例对象 1
  • linux内核中的设计模式

    创建型 Object Pool Object Pool模式可以提升性能 尤其是在对象的分配 初始化成本高 使用频率高 但使用时间短的情况下 对象池可以设置对象池的大小和回收时间缓存预分配的对象 NT和Linux都有简单的预分配缓存对象的机制
  • 策略模式-

    定义 定义一系列的算法 把它们一个个封装起来 目的就是将算法的使用与算法的实现分离开来 从而算法的变化不会影响到使用算法的用户 适用场景 1 假如系统中有很多类 而他们的区别仅仅在于他们的行为不同 2 一个系统需要动态地在几种算法中选择一种
  • JavaScript设计模式-02-单例模式

    Javascript 设计模式 02 单例模式 简介 单例就是保证一个类只有一个实例 实现的方法一般是先判断实例是否存在 如果存在直接返回 如果不存在就创建了再返回 确保了一个类只有一个实例对象 在JavaScript里 单例作为一个命名空
  • 泛型与反射机制在JDBC和Servlet编程中的实践

    写在前面 泛型与反射是java中的两种强大机制 可以很好的提高代码的灵活性和复用性 本篇文章向大家展现在JDBC和Servlet编程场景下反射和泛型技术的实践 通过灵活使用这两种机制打造 高度可复用的JDBC和Servlet代码 1 JDB
  • 设计模式详解---策略模式

    1 策略模式简介 策略模式 Strategy Pattern 是一种行为型设计模式 用于在运行时根据不同的情境选择不同的算法或策略 该模式将算法封装成独立的类 使得它们可以相互替换 而且可以独立于客户端使用它们的方式 1 1 主要角色 上下
  • 设计模式(三)-结构型模式(4)-组合模式

    一 为何需要组合模式 Composite 在代码设计中 有种情况是对象之间存在层次关系 即对象之间会存在父结点和子结点的关系 比如在文件管理系统中 所有文件和文件夹形成树状结构 文件夹目录里存在子文件夹和文件 文件夹属于枝结点 文件属于叶结

随机推荐

  • C++两个类的头文件相互包含

    C 中头文件相互包含的几点问题 一 类嵌套的疑问 C 头文件重复包含实在是一个令人头痛的问题 前一段时间在做一个简单的数据结构演示程序的时候 不只一次的遇到这种问题 假设我们有两个类A和B 分别定义在各自的有文件A h和B h中 但是在A中
  • 英特尔cpu发布时间表_英特尔延长CPU发布周期:摩尔定律终结

    据外媒报道 英特尔最近在公司文档中废止了 嘀嗒 的芯片发展周期 第三代Skylake架构处理器 Kaby Lake CPU将在今年第三季度发布 彻底打破了 制程 架构 的钟摆节奏 英特尔延长CPU发布周期 图片来自新浪 英特尔表示 从下一代
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • 根据IDEA完成的简单学生成绩管理系统

    根据IDEA完成的简单学生成绩管理系统 要求 输入选项 当选择录入成绩的时候来输入各个学生的成绩 直到输入 1 结束输入成绩 最后输出输入了几名学生的成绩 然后循环到主界面 输入其他的选项 来查询学生成绩的平均分 最高分 最低分 然后退出系
  • mysqlbinlog delete恢复成insert

    不小心把数据删掉了 首先要拿到binlog文件 执行以下命令行 usr local mysql bin mysqlbinlog base64 output decode rows start datetime 2023 05 19 09 0
  • 树莓派传感器篇

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 玩树莓派其中方向之一 控制各种传感器 先搞明白各种传感器的参数及使用方式 树莓派GPIO各个引脚的用处及含义 这里要着重说明一点的是 千万不要把3 3V以上的电压链接到树莓
  • OpenSSL中文手册之PEM库详解

    版权声明 本文根据DragonKing牛 E Mail wzhah 263 NET发布在https openssl 126 com的系列文章整理修改而成 这个网站已经不能访问了 我自己所做的工作主要是针对新的1 0 2版本进行验证 修改错别
  • 十八.欧几里得算法

    欧几里得算法 unsigned int Gcd unsigned int M unsigned int N unsigned int Rem while N gt 0 Rem M N M N N Rem return M 此算法用来计算最大
  • Vue实现动画的几种方式

    vue内置组件transition 元素出现和消失都呈现动画
  • For循环结构的使用

    一 四个要素 初始化条件 循环条件 gt 是boolean类型 循环体 迭代条件 二 for循环的结构 for 执行过程 1 2 3 4 2 3 4 2 遍历100以内的偶数 输出所有偶数和 int sum 0 记录所有偶数的和 int c
  • FTP服务器版本信息可被获取(CVE-1999-0614)(建议修改源代码或者配置文件改变缺省banner信息。)

    漏洞扫描报告 1 测试查看 默认端口21 telnet localhost 21 下图所示即为漏洞信息描述的 可获取版本号 2 修改 vsftpd conf 配置文件 etc vsftpd vsftpd conf 找到 ftpd banne
  • linux 怎样停定时任务,linux停用cron定时执行任务的方法

    linux下用cron定时执行任务的方法 名称 crontab 使用权限 所有使用者 使用方式 crontab file u user 用指定的文件替代目前的crontab crontab u user 用标准输入替代目前的crontab
  • C++泛型编程

    C 泛型编程 1 泛型编程 1 1 模板 1 2 函数模板 1 2 1 语法 1 2 2 使用函数模板方式 1 2 3 普通函数和函数模板的区别 1 2 4 普通函数与函数模板的调用规则 1 2 5 模板的局限性 1 3 类模板 1 3 1
  • findBug 错误修改指南

    FindBugs错误修改指南 1 EC UNRELATED TYPES Bug Call to equals comparing different types Pattern id EC UNRELATED TYPES type EC c
  • spark_hadoop集群搭建自动化脚本

    bin bash 脚本使用说明 1 使用脚本前需要弄好服务器的基础环境 2 在hadoop的每个节点需要手动创建如下目录 data hdfs tmp 3 修改下面的配置参数 4 脚本执行完备后需要收到格式化namenode
  • APP移动端自动化测试(八)总览

    官网地址 https github com appium appium blob master docs en writing running appium server args md 项目中你是怎么结合自动化的 apk for andr
  • JavaScript 获取时间日期方法

    Date对象包含日期和时间的相关信息 Date对象没有任何属性 它只具有很多用于设置和获取日期时间的方法 方法 说明 getDate 返回Date对象中月份的天数 gateDay 返回Date对象中的星期几 getHours 返回Date对
  • 机器学习算法案例:泰坦尼克号乘客生存预测

    学习目标 通过案例进一步掌握决策树算法api的具体使用 1 案例背景 泰坦尼克号沉没是历史上最臭名昭着的沉船之一 1912年4月15日 在她的处女航中 泰坦尼克号在与冰山相撞后沉没 在2224名乘客和机组人员中造成1502人死亡 这场耸人听
  • ubuntu编译安装mmcv 1.6.2和mmsegmentation 0.28.0

    环境 ubuntu16 04 cuda10 1 python 3 8 pytorch 1 6 0 cuda10 1 对应的torch版本 lt 1 8 但是1 8和1 7都试了 mmcv没有编译成功 只有1 6成功了 1 编译MMCV 1
  • 行为型模式-策略模式

    package per mjn pattern strategy 抽象策略类 public interface Strategy void show package per mjn pattern strategy 具体策略类 用来封装算法