首页 > 其他分享 >应该也算策略模式吧

应该也算策略模式吧

时间:2023-09-28 22:14:18浏览次数:31  
标签:应该 策略 void System 模式 println HandlerContext public

调用方自主选择策略方式:如食堂打饭,有很多窗口供选择,用户只需要去想买的窗口刷卡打饭即可

三个关键角色:

  • 上下文信息类(Context):用于存放和执行需要使用的具体策略类以及客户端调用的逻辑。
  • 抽象策略类(Strategy):定义策略的共有方法。
  • 具体策略类(StrategyA 等):实现抽象策略类定义的共有方法

优点:调用算法和算法实现隔离;方便代码扩展和维护;减少if-else嵌套

缺点:学习成本高

// 上下文信息类:用于存放和执行需要使用的具体策略类以及客户端调用的逻辑
class HandlerContext {
    private Map<Integer, Handler> temp = new HashMap<>(10);

    public void putH(Integer i, Handler s){
        temp.put(i, s);
    }

    public Handler getH(Integer i){
        return temp.get(i);
    }
}
// 抽象策略类:定义策略的共有方法
interface Handler{
    void doHandler();

}

// 关联上下文信息类
abstract class BaseHandler implements Handler{
    private HandlerContext h;

    public BaseHandler(HandlerContext h){
        System.out.println("this:" + this);
        h.putH(10, this);
    }

    @Override
    public void doHandler() {
        System.out.println("BaseHandler");
        handler();
    }

    public abstract void handler();
}

// 具体策略类:实现抽象策略类定义的共有方法
class SmsHandler extends BaseHandler implements Handler{

    public SmsHandler(HandlerContext h) {
        super(h);
    }

    @Override
    public void handler() {
        System.out.println("SmsHandler");
    }
}

public class StrategyPattern{

    public static void main(String[] args) throws IOException {
        HandlerContext h = new HandlerContext();
        BaseHandler s = new SmsHandler(h);
        s.doHandler();
        System.out.println("=========");
        System.out.println(h.getH(10));
        h.getH(10).doHandler();

    }
}

标签:应该,策略,void,System,模式,println,HandlerContext,public
From: https://www.cnblogs.com/jishaling/p/17736551.html

相关文章

  • 巩固系统韧性三个基础策略
    众所周知我所在的团队常年解决线上问题,我也以为我们会在解决一个个具体问题的道路上无聊走到黑。但是最近出现的各种疑难杂症似乎让我们的工作有了一点乐趣,甚至有了更高级的意义。这些疑难杂症包括但不限于因为网络故障导致邮件发送失败因为数据库磁盘满导致数据出现了读写不......
  • 软件设计模式系列之十八——迭代器模式
    1模式的定义迭代器模式是一种行为型设计模式,它允许客户端逐个访问一个聚合对象中的元素,而不暴露该对象的内部表示。迭代器模式提供了一种统一的方式来遍历不同类型的集合,使客户端代码更加简洁和可复用。2举例说明为了更好地理解迭代器模式,让我们考虑一个简单的例子:一个图书馆......
  • 用策略模式干掉代码里大量的if-eles或则Swatch,提升B格由面向过程转为面向对象
    现象大量的分支选择型代码段看着让人头疼for(Fieldfield:declaredFields){Class<?>type=field.getType();Stringkey=field.getName();Elementresult=resultMap.addElement("result");result.addAttribute......
  • Win10/Win11没有组策略管理器怎么办(亲测有效)
    win10家庭版或win11没有组策略管理器1、新建文本文档输入以下代码@echooffpushd"%~dp0"dir/bC:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum>List.txtdir/bC:\Windows\servicing\Packages\Microsoft-Windows-Group......
  • 生成树欺骗攻击与防御策略
    生成树欺骗攻击与防御策略工作目的掌握交换机生成树选举的过程、欺骗原理、攻击过程和防范策略任务分析生成树的端口有五种状态。交换机的边缘端口不接收BPDU,选举时直接从堵塞状态转变为转发状态,不参与生成树的选举过程,默认情况下,交换机的所有端口均为非边缘端口,为避免生成生......
  • 智慧教育:数字化时代的未来教育模式
    项目背景随着技术的进步和互联网的普及,教育机构和学校开始寻求利用先进的技术和创新的教育方法来提高学习效果和管理效率,包括在线教育、远程学习、教育数据分析等方面的发展。智慧教育旨在将这些技术和方法应用于教育领域,以满足学生、教师和教育机构的不断增长的需求,提供更灵活、......
  • Windows server 2016:无法打开此计算机上的组策略对象。你可能没有相应的权限。
    问题现象:使用服务器管理器打开本地安全策略,或使用win+R快捷键,输入gpedit.msc打开系统组策略时,出现报错:无法打开此计算机上的组策略对象。你可能没有相应的权限。解决方法:1、使用win+E快捷键打开资源管理器,点击”查看“,勾选”隐藏的项目“,因为C:\Windows\System32\GroupPolicy......
  • Python sanic AsyncIOScheduler 的单例模式
    sanic是个异步框架。可以配置多个worker,执行定时任务时,也会执行多遍。期望通过单例模式,确保只运行一次。解决思路。AsyncIOScheduler函数有没有自带的单例模式,答案无。网上有没有相关做法,搜集半天,没有太好的办法。试过全局变量,协程共享变量等,均无效。试着用进程的共享变量来解......
  • 男人应该要偷偷知道的十件事
    1、一个真正爱你的女人,需要的不是锦衣华服,海誓山盟,而是安全感。一个她可以在任何时候都靠得住的肩膀,当她受了委屈伏在你肩头哭泣的时候,不要躲开。2、在她一人独处的夜晚,不要忘了打电话给她,哪怕只说一句:没什么,只是想你了。3、不要吝惜说我爱你,这是取悦女人耳朵的......
  • 【WCH蓝牙系列芯片】-基于CH582开发板—BLE从机开启HAL Sleep模式
    ---------------------------------------------------------------------------------------------------------------------在WCH沁恒官方提供的CH583的EVT资源包中,找到BLE文件中找到【Peripheral:外设从机角色例程】这个工程文件,在这个工程文件中,添加HALSleep模式,开启低功耗模......