责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦,本人根据https://www.runoob.com/design-pattern/chain-of-responsibility-pattern.html所给的例子,用Matlab代码实现责任链模式

AbstractLogger.m

  1. classdef AbstractLogger < handle & matlab.mixin.Heterogeneous
  2. properties(Constant)
  3. INFO = 1;
  4. DEBUG = 2;
  5. ERROR = 3;
  6. end
  7. properties(Access = protected)
  8. level
  9. nextLogger = AbstractLogger.empty();
  10. end
  11. methods(Abstract,Access = protected)
  12. write(~);
  13. end
  14. methods
  15. function setNextLogger(obj,nextLogger)
  16. obj.nextLogger = nextLogger;
  17. end
  18.  
  19. function logMessage(obj,level,message)
  20. if(obj.level <= level)
  21. obj.write(message);
  22. end
  23. if ~isempty(obj.nextLogger)
  24. obj.nextLogger.logMessage(level, message);
  25. end
  26. end
  27. end
  28. end

 ConsoleLogger.m

  1. classdef ConsoleLogger < AbstractLogger
  2. methods
  3. function obj=ConsoleLogger(level)
  4. obj.level = level;
  5. end
  6. end
  7. methods(Access = protected)
  8. function write(~,message)
  9. disp("Standard Console::Logger: " + message);
  10. end
  11. end
  12. end

 FileLogger.m

  1. classdef FileLogger < AbstractLogger
  2.     methods
  3.         function obj=FileLogger(level)
  4.             obj.level = level;
  5.         end
  6.     end
  7.     methods(Access = protected)
  8.         function write(~,message)
  9.             disp("File Console::Logger: " + message);
  10.         end
  11.     end   
  12. end

 ErrorLogger.m

  1. classdef ErrorLogger < AbstractLogger
  2. methods
  3. function obj=ErrorLogger(level)
  4. obj.level = level;
  5. end
  6. end
  7. methods(Access = protected)
  8. function write(~,message)
  9. disp("Error Console::Logger: " + message);
  10. end
  11. end
  12. end

 测试代码:

  1. errorLogger = ErrorLogger(AbstractLogger.ERROR);
  2. fileLogger = FileLogger(AbstractLogger.DEBUG);
  3. consoleLogger = ConsoleLogger(AbstractLogger.INFO);
  4.  
  5. errorLogger.setNextLogger(fileLogger);
  6. fileLogger.setNextLogger(consoleLogger);
  7.  
  8. loggerChain = errorLogger;
  9. loggerChain.logMessage(AbstractLogger.INFO, "This is an information.");
  10. loggerChain.logMessage(AbstractLogger.DEBUG, "This is a debug level information.");
  11. loggerChain.logMessage(AbstractLogger.ERROR, "This is an error information.");

Matlab责任链模式的更多相关文章

  1. 23种设计模式--责任链模式-Chain of Responsibility Pattern

    一.责任链模式的介绍 责任链模式用简单点的话来说,将责任一步一步传下去,这就是责任,想到这个我们可以相当击鼓传花,这个是为了方便记忆,另外就是我们在项目中经常用到的审批流程等这一类的场景时我们就可以考 ...

  2. ResponsibleChain(责任链模式)

    /** * 责任链模式 * @author TMAC-J * 老板讲任务交给CTO,CTO自然不会亲自去做,又把人物分配给项目经理,项目经理再把任务分配给组长,组长再分配给个人 * 如果中途哪个环节出 ...

  3. C#设计模式-责任链模式

    在现实生活中,有很多请求并不是一个人说了就算的,例如面试时的工资,低于1万的薪水可能技术经理就可以决定了,但是1万~1万5的薪水可能技术经理就没这个权利批准,可能就需要请求技术总监的批准,所以在面试的 ...

  4. 责任链模式/chain of responsibility/行为型模式

    职责链模式 chain of responsibility 意图 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处 ...

  5. 设计模式C#实现(十四)——责任链模式

    意图 0 适用性 1 结构 2 实现 3 效果 4 参考 5 意图 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象 ...

  6. [工作中的设计模式]责任链模式chain

    一.模式解析 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知 ...

  7. 十一个行为模式之责任链模式(Responsible Chain Pattern)

    定义: 将具有相同接口的责任类串行在一起,解耦请求的发送者和处理者.沿着这条链进行请求,直到有对象处理它为止. 结构图: Handler:抽象处理类,定义了所有责任类处理方法的接口,不同的处理方法在子 ...

  8. 浅谈Java五大设计原则之责任链模式

    首先我们得先定义一个责任链模式: 责任链模式是一种线性执行流程,多个对象都有机会去执行同一个任务,只是在执行过程中, 由于执行的权利和范围不一样,那么当自己不能处理此任务时,就必须将这个任务抛给下一个 ...

  9. C#设计模式(21)——责任链模式

    一.引言 在现实生活中,有很多请求并不是一个人说了就算的,例如面试时的工资,低于1万的薪水可能技术经理就可以决定了,但是1万~1万5的薪水可能技术经理就没这个权利批准,可能就需要请求技术总监的批准,所 ...

随机推荐

  1. 线程:Java中wait、notify、notifyAll使用详解

    基础知识 首先我们需要知道,这几个都是Object对象的方法.换言之,Java中所有的对象都有这些方法. public final native void notify(); public final ...

  2. Mesa: GeoReplicated, Near RealTime, Scalable Data Warehousing

    Mesa的定义并没有反映出他的特点,因为分布式,副本,高可用,他都是依赖google的其他基础设施完成的 他最大的特点是,和传统数仓比,可以做到near real-time的返回聚合的查询结果 算入实 ...

  3. http状态码610,613

    610  请求超时 613  dns解析错误

  4. LeetCode 108. Convert Sorted Array to Binary Search Tree (将有序数组转换成BST)

    108. Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascendin ...

  5. Idea导入maven项目没有识别

    选中module的pom.xml,右键,选择" add as maven project",idea会识别该pom的项目  

  6. Redist的主从配置

    Redis的主从复制一般用来在线备份和读写分离,提高服务器的负载能力.主数据库主要进行写操作,而从数据库负责读操作. 主从的配置: 主节点: [root@master ~]# grep -v -E & ...

  7. [LeetCode] 929. Unique Email Addresses 唯一的电邮地址

    Every email consists of a local name and a domain name, separated by the @ sign. For example, in ali ...

  8. redis启动警告解决

    vim /etc/rc.localecho never > /sys/kernel/mm/transparent_hugepage/enabled加入上面那句到/etc/rc.local,开机启 ...

  9. tcp端口扫描与syn扫描

    连接网络设备时,一般都会在网络设备端选取0-65535之间的一个端口进行连接,端口扫描是指:检查网络设备上0-65535号端口哪些端口是开启状态.如果黑客扫描到某网络设备的80端口是开启状态,那么很有 ...

  10. aix如何将history输出所有命令导出到文本文件

    more .sh_history cat .sh_history > mylogfile.txt