Part III: 1_ 责任链模式

定义: 责任链模式

内容: 使多个对象有机会处理请求, 从而 避免请求的发送者和接受者之间的耦合关系;

将这些对象连成一条链, 并沿着这条链传递该请求, 直到有一个对象处理它为止;

角色:
抽象处理者( handler)
具体处理者
客户端;

适用场景:

1.  有多个对象可以处理 一个请求, 哪个 对象处理由运行时决定;
2.   在不明确接受者的情况下, 向多个对象中的一个提交一个请求

优点:
降低耦合度: 一个对象无需知道 是其他哪一个对象处理其请求;

代码实例

底层代码

from abc import ABCMeta, abstractmethod

class Handler(metaclass= ABCMeta):
    @abstractmethod
    def handle_leave(self, day):
        pass

class  GeneralManager(Handler):
    def  handle_leave(self, day):
        if day <= 10:
            print('General manger approve % d day' % day )
        else:
            print(' you may  quit the job')

class  DepartmentManager(Handler):
       def __init__(self):
           self.next = GeneralManager()


       def  handle_leave(self, day):
           if  day <= 5 :
               print(' department manager approve %d ' % day )

           else:
               print(' department manager properity not enough ')
               self.next.handle_leave(day)


class ProjectDirector(Handler):
      def __init__(self):
          self.next = DepartmentManager()

      def handle_leave(self, day):
          if day <= 3:
              print('Project manager approve %d' % day)

          else:
              print(' Project manager  properity not enough' )
              self.next.handle_leave(day)

高层代码


day = 9
h = ProjectDirector()
h.handle_leave(day)


#include<iostream> #include<ctime> #include<chrono> #include<string> #include<filesystem> #include<fstream> #include<sstream> #include<thread> #include<boost/filesystem.hpp> const uintmax_t MAX_LOGS_SIZE = 10ull * 1024ull * 1024ull * 1024ull; //const uintmax_t MAX_LOGS_SIZE = 10ull; void create_folder(std::string folder_name) { boost::filesystem::create_directory(folder_name); std::string sub_foldername=folder_name+"/logs_ros"; boost::filesystem::create_directory(sub_foldername); } std::string get_current_time() { auto now = std::chrono::system_clock::now(); std::time_t now_c = std::chrono::system_clock::to_time_t(now); std::tm parts = *std::localtime(&now_c); char buffer[20]; std::strftime(buffer, sizeof(buffer), "%Y-%m-%d-%H-%M", &parts); return buffer; } void check_logs_size() { std::string logs_path = "/home/sage/logs/"; boost::filesystem::path logs_dir(logs_path); std::uintmax_t total_size = 0; for (const auto& file : boost::filesystem::recursive_directory_iterator(logs_dir)) { if (boost::filesystem::is_regular_file(file)) { total_size += boost::filesystem::file_size(file); } } if (total_size > MAX_LOGS_SIZE) { boost::filesystem::path earliest_dir; std::time_t earliest_time = std::time(nullptr); for (const auto& dir : boost::filesystem::directory_iterator(logs_dir)) { if (boost::filesystem::is_directory(dir)) { std::string dir_name = dir.path().filename().string(); std::tm time_parts = {}; std::istringstream ss(dir_name); std::string part; std::getline(ss, part, '-'); time_parts.tm_year = std::stoi(part) - 1900; std::getline(ss, part, '-'); time_parts.tm_mon = std::stoi(part) - 1; std::getline(ss, part, '-'); time_parts.tm_mday = std::stoi(part); std::getline(ss, part, '-'); time_parts.tm_hour = std::stoi(part); std::getline(ss, part, '-'); time_parts.tm_min = std::stoi(part); std::time_t dir_time = std::mktime(&time_parts); if (dir_time < earliest_time) { earliest_time = dir_time; earliest_dir = dir.path(); } } } if (!earliest_dir.empty()) { boost::filesystem::remove_all(earliest_dir); } } } int main() { std::string logs_path = "/home/sage/logs/"; while (true) { std::chrono::system_clock::time_point now = std::chrono::system_clock::now(); std::time_t now_c = std::chrono::system_clock::to_time_t(now); std::tm parts = *std::localtime(&now_c); if (parts.tm_min % 10 == 0) { std::string folder_name = logs_path + get_current_time(); create_folder(folder_name); } check_logs_size(); std::this_thread::sleep_for(std::chrono::minutes(1)); } return 0; }修改为ros节点
06-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值