加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用部分常见的实现设计C类

发布时间:2020-12-16 09:46:12 所属栏目:百科 来源:网络整理
导读:我正在设计一个C模块.该模块可以接收3种不同类型的请求:Request-A,Request-B和Request-C. 对于每种类型,我都有一个相应的处理程序类:RequestHandler-A,RequestHandler-B和RequestHandler-C(所有这些都实现了IRequestHandler接口). 每个处理程序都必须执行
我正在设计一个C模块.该模块可以接收3种不同类型的请求:Request-A,Request-B和Request-C.
对于每种类型,我都有一个相应的处理程序类:RequestHandler-A,RequestHandler-B和RequestHandler-C(所有这些都实现了IRequestHandler接口).
每个处理程序都必须执行某些操作才能满足其请求.
例如,RequestHandler-A需要按顺序执行:
动作1
动作2
动作3
动作4
行动-5

RequestHandler-B需要按顺序执行这些操作:
动作1
动作3
行动-5

RequestHandler-C需要按顺序执行:
动作4
行动-5

一个动作的结果将被下一个动作使用.

我正在努力设计这些类,以便在处理程序之间重用常见的动作实现.
有没有可以在这里应用的设计模式?也许模板方法模式可能是一种可能,但我不确定.
任何建议将不胜感激.

PS:为了使事情更有趣,还有一个要求,如果Action-2失败,我们应该用不同的数据重试它.但也许我在想太远了.

解决方法

“常见实现”意味着您的解决方案与继承无关.继承用于接口重用,而不是实现重用.

你发现你有共同的代码,只需使用共享功能:

void action1();
void action2();
void action3();
void action4();
void action5();

struct RequestHandlerA : IRequestHandler {
    virtual void handle( Request *r ) {
        action1();
        action2();
        action3();
    }
};

struct RequestHandlerB : IRequestHandler {
    virtual void handle( Request *r ) {
        action2();
        action3();
        action4();
    }
};

struct RequestHandlerC : IRequestHandler {
    virtual void handle( Request *r ) {
        action3();
        action4();
        action5();
    }
};

假设公共函数只是内部帮助器,您可能希望将它们设置为静态(或使用匿名命名空间)来获取内部链接.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读