`
edison0663
  • 浏览: 79485 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

装饰模式随笔

阅读更多

上周看代码的时候,看到一坨shit(其实shit很多,我自己也经常写出Shit)如果由自己来想,如何写出优雅的代码呢?

 

 

场景: 初步请求其实再简单不过, 就是一个经典的 请求处理接口

 

          int Handle( Buffer * ptBuffReq, Buffer * ptBuffResp )

 

          网络层将请求包收到后(验证请求包正确后), 将请求包的内容,交给Handle去处理。

 

          Handle 的处理流程: A版本

          1 从ptBufferReq 反序列化出具体结构体stReq;

          2 具体逻辑处理, 处理结果stReq;

          3 序列化 stResp 到ptBufferResp;

 

          代码在这个时候还是很清晰,并且层次分明的。

 

需求变更:需要在原有的逻辑处理,希望打印所有的请求类型 stReq.type及其他参数 到日志中。

 

          于是Handle的处理流程:

          1 从ptBufferReq 反序列化出具体结构体stReq;

          2 (插入代码Log(stReq.type)) 具体逻辑处理, 处理结果stReq;

          3 序列化 stResp 到ptBufferResp;

 

需求再变更: 请求量大,日志开销较大,对请求进行抽样大

 

           继续在Handle 这个接口中 加入  if( 抽样范围 ) Log 的代码。

 

需求变更持续ing:  异步分析请求合法性功能, 染色Log(一旦被染色中都打log), 开关这些后续添加的功能。

 

           Handle的代码终于 shit 一般了。虽然勉强可读,确实已经 很恶心了。

 

这种场景,我们描述为: 接口职责不变,接口 功能增加,且要求功能能灵活组合,开关

装饰模式在这种场景下,非常适用: 不改变其接口职责,动态组合增加的功能

 

如何做呢?

           class VHandle 纯虚函数 Handle;

 

具体子类 class HandleImpl  Handle 实现 A版本的 流程。

 

抽象插件子类 class HandlePlugin 其构造函数要求传入 一个VHandle的指针. Handle() 实现是m_ptVHanlde->Handle(), 再回调一个纯虚函数, PluginHandle();

 

具体插件子类 AsyncAnalyseHandle, StatLogHandle 继承 HandlePlush.  并在PluginHandle实现自己的具体逻辑z。

 

具体类图如:

 

     

 

     现在这堆代码已经很灵活了,可以根据配置文件达成各种组装。

     比如: VHandle * ptHandle = new HandleImpl();

               VHandle * ptHandlePlugedAsyncAnalyse = new AsyncAnalyseHandle( ptHandle );

               VHandle * ptHandlePlugedAll = new StatLogHandle( ptHandlePlugedAsyncAnalyse );

 

 

     ShowCase 就到这了。 还有各种非常优雅的应用, 装饰模式非常好用,顶一个。

 

 

  • 大小: 65.4 KB
1
8
分享到:
评论

相关推荐

    NET设计模式随笔

    结构型模式(如适配器模式、桥接模式、装饰器模式、外观模式、组合模式、享元模式和代理模式)关注如何组合类和对象以形成更大的结构,它们提供了一种方式来改善系统的设计和结构。行为型模式(如责任链模式、命令...

    设计模式随笔系列

    在设计模式中,鸭子问题通常与工厂模式、策略模式和装饰器模式有关。下面分别对这三个模式进行详细解释: 1. **工厂模式**:在鸭子问题中,可以创建一个鸭子工厂,该工厂负责根据不同的需求生成不同类型的鸭子对象...

    Java完整随笔(学习)

    14. **设计模式**:可能介绍了常见的设计模式,如单例、工厂、观察者、装饰器模式等,并通过实例解释其应用场景。 15. **Java 8及更高版本的新特性**:例如lambda表达式、流API、函数式编程概念、Optional类等。 ...

    教育行业周随笔:一对一教培模式简析.rar

    《教育行业周随笔:一对一教培模式简析》这篇文档深入探讨了当前教育行业中备受关注的一对一教学培训模式。一对一教培模式是近年来在K-12教育领域中兴起的一种个性化教学方式,它强调根据每个学生的个体差异进行定制...

    网恋随笔散文随笔散文.rar

    很抱歉,但根据您给出的信息,标题和描述中提到的是"网恋随笔散文随笔散文.rar",这明显与IT行业知识不相符,而更倾向于文学或个人创作。标签虽为"教育",但没有具体的IT教育相关知识点。压缩包子文件的文件名称列表...

    .net设计模式详细介绍以及案例代码

    .NET设计模式系列文章和随笔,如Terrylee的"探索设计模式"系列,提供了对.NET中常见设计模式的详细介绍和案例代码,对初学者和有经验的开发者都有很大的帮助。这类资源可以帮助开发者在.NET平台上更加高效地应用设计...

    MATHCAD学步随笔

    工程数学软件实用入门资料,可视很好,不需要专门的语言。

    散文随笔【黄牛散文随笔】.rar

    "散文随笔【黄牛散文随笔】.rar" 是一个压缩文件,其中包含了由作者“黄牛”创作的散文随笔集合。这个标题指示我们,这是一份文学作品,主要涵盖了散文和随笔这两种文体,可能包含作者对生活、社会、自然等各方面的...

    关于描写夏天的散文随笔.doc

    关于描写夏天的散文随笔.doc

    教师随笔-小班教师政治随笔5篇.docx

    根据给定文件的信息,我们可以提炼出以下几个主要的知识点: ### 1. 幼儿教育的重要性 - **基础知识**:从婴幼儿出生到成长的过程是不断进步发展的。幼儿园阶段是这一过程中的重要环节,它不仅关系到孩子们的身体...

    一年级数学第一学期教学随笔.pdf

    一年级数学第一学期教学随笔.pdf

    关于小学一年级数学下册教学随笔.docx

    关于小学一年级数学下册教学随笔.docx

    信息技术教学随笔.doc

    信息技术教学随笔主要探讨了如何在信息技术教学中应对教材陈旧和激发学生兴趣的问题。作者指出,信息技术学科因其快速发展,教学内容应及时更新,以适应不断变化的信息环境。针对使用过时教材的情况,教师采取了以下...

    一年级语文教学随笔.pdf

    这篇教学随笔主要探讨了以下几个方面: 首先,教师需要认识到一年级学生的特点,他们活泼好动,注意力维持时间较短。因此,创设有趣、富有吸引力的教学情境至关重要。例如,通过设立小奖励,如小红旗、小红花等,...

    [小忆故乡随笔]故乡随笔.rar

    【小忆故乡随笔】是一本以回忆故乡为主题的随笔集,主要涵盖了作者对家乡的点滴记忆、情感体验以及对乡土文化的深刻洞察。这不仅是一部文学作品,也是一份珍贵的文化记录,对于读者来说,它既能够带来阅读的愉悦,也...

    有关家风的经典散文随笔.doc

    有关家风的经典散文随笔.doc

    散文随笔【黄牛散文随笔】.pdf

    散文随笔【黄牛散文随笔】.pdf

    散文随笔【人间五月散文随笔】.rar

    "散文随笔【人间五月散文随笔】.rar" 这个标题表明这是一款压缩文件,格式为RAR,其中包含了名为“人间五月散文随笔”的散文集。"人间五月"可能指的是散文的主题或者创作的时间背景,与春天、生机、生活等元素相关。...

    二年级数学上册的教学随笔.docx

    二年级数学上册的教学随笔.docx

    心情日记随笔参考.doc

    "心情日记随笔参考" 本文是关于心情日记随笔的参考文献,包含四篇随笔,每篇都是作者对生活中的感悟和思考。通过这些随笔,我们可以看到作者对生活的热爱和感恩,对梦想的追求和信念。 第一篇:心情日记随笔 这篇...

Global site tag (gtag.js) - Google Analytics