`

设计模式重构应用---Decorator模式

 
阅读更多

先简单介绍Decorator 模式(装饰模式)的内容和应用场景。

装饰模式可以动态地给一个对象添加额外的职责。虽然,利用子类继承也可以实现这样的功能,但是装饰模式提供了一个更灵活的方式。
因为继承会为类型引入的静态特质,使得这种扩展方式缺乏灵活性;
并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀。

下面是标准Decorator 模式的UML结构图:

clip_image001

[此图来自GOF 《设计模式》一书]

现在结合我实际开发的一个例子谈谈这个模式的重构应用。

还是那个SEO的项目,涉及群登录、群发帖、群回复等功能。为了客户调用简单和代码重用,
设计的时候使用三个类来封装这些功能:SiteLogin、SitePost、SiteReply。每个站点的登录发帖回复功能都是调用这三个类实现的。

刚开始设计时,只考虑一般HTTP协议的GET、POST请求,因为刚开始预研的时候,发现几个网站都是这样处理登录发帖回复的。

随着后来,网站对象的不断增加,发现有下面的两个新需求:

1. 有些站点采用Content-Type为multipart/form-data的方式提交,而不是默认的application/x-www-form-urlencoded方式。
这两种方式,在httpclient 3.1 中处理方法是完全不同的(虽然4.0版本已经合并到一起了)。

2. 有些站点是采用https的方式提交的(增加额外的功能)。

3. 有些网站是这两种扩展需求都存在。

当然,为了应付这样的变数,处理方法有很多,可以在代码中直接使用if语句来判断,也可以通过子类继承的方式增强这样的功能。
使用if语句的方式,处理这样比较大的需求,是不优雅的。子类继承的方式,在需求组合时会出现子类数目爆炸式增长。
通过使用Decorator 模式的重构,可以比较好的处理这类问题。

最后设计的UML图如下(代码就不贴出来了):

image

友情提示:本博文章欢迎转载,但请注明出处:陈新汉

分享到:
评论

相关推荐

    重构与模式(1-4)

    《重构与模式(1-4)》探讨的主题是软件设计中的两种常见问题——过度设计和设计不足,以及如何通过重构和模式的灵活运用来平衡这两者。过度设计指的是在开发过程中,为了应对可能的未来需求,提前引入了不必要的复杂...

    设计模式与重构(design pattern )

    设计模式与重构是软件开发中的两个重要概念,它们在提高代码质量、可维护性和扩展性方面发挥着关键作用。设计模式是经验丰富的开发者们在解决常见问题时总结出的最佳实践,而重构则是在不改变软件外部行为的前提下,...

    JAVA设计模式-chm版

    3. 分析和重构现有代码,找出并应用设计模式。 4. 参与讨论和分享,与其他开发者交流设计模式的理解和应用。 总之,“JAVA设计模式-chm版”资源对于深入理解并掌握Java设计模式具有很高的价值。通过学习和实践,...

    23种设计模式 - 架构设计 - PPT

    ### 23种设计模式详解 #### 一、设计模式概览 ...以上是对23种设计模式中一部分模式的基本概述,每种模式都有其特定的应用场景和优点,了解和掌握这些设计模式对于提高软件质量和开发效率具有重要意义。

    JavaScript设计模式与开发实践.pdf

    在本书中,作者还分享了自己在设计模式方面的研究和实践经验,包括设计模式的原型、设计模式的分类、设计模式的应用等,并提供了一些常见的设计模式的示例代码,帮助读者更好地理解和掌握设计模式。 《JavaScript...

    ASP.NET设计模式-杨明军译(源码)

    《asp.net设计模式》涵盖了开发企业级asp.net应用程序的知名模式和最佳实践。本书用到的模式可以用于从asp.net1.0到asp.net 4.0的任何版本。不必管模式本身所用的语言,可以将模式用于任何面向对象编程语言。  ...

    重构-改善既有代码的设计

    常见的设计模式有单例模式(Singleton)、工厂模式(Factory)、观察者模式(Observer)、装饰器模式(Decorator)等。每种模式都有其特定的适用场景,理解并熟练运用这些模式,可以帮助我们编写出更具灵活性和可...

    设计模式源码

    每一种设计模式都有其特定的用途和应用场景,比如: - 单例模式保证一个类只有一个实例,适用于资源管理或全局配置。 - 工厂方法模式允许子类决定实例化哪一个类,提供了一种封装对象创建过程的方式。 - 抽象工厂...

    设计模式:可复用面向对象软件的基础--详细书签版

    因此我们欢迎广大读者的批评与指正,无论从书中采用的实例、参考,还是我们遗漏的已知应用,或应该包含的设计模式等方面。你可以通过Addison-Wesley写信给我们,或发送电子邮件到:design-patterns@cs.uiuc.edu。你...

    设计模式精解 设计模式精解

    根据给定的信息,本文将深入探讨GoF23种设计模式的核心概念及其应用场景,并通过具体的实例来解析每一种设计模式的实现原理和技术要点。 ### 0. 引言 设计模式是一系列被广泛接受的解决方案,用于解决软件设计中...

    GoF设计整理(C#实现)在示意图、C#代码的基础上,又增加了设计模式意图、使用场景和重构成本,并增加了PDF书签功能。以后还将持续完善。下载.

    本文将基于给定的资料,详细介绍GOF(GoF,即Gang of Four)设计模式中的各类模式,包括其定义、意图、应用场景及可能带来的重构成本,并简要提及资料中新增加的PDF书签功能。 #### 设计模式简介 设计模式是针对某...

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 引言 设计模式是一套被反复使用、多数人知晓的、经过分类...每种模式都有其独特的应用场景,理解并合理使用这些设计模式能够显著提升软件设计的质量。

    设计模式,设计模式详解

    设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决常见问题的最佳实践...通过阅读《Refactoring-重构》这样的书籍,我们可以学习如何改进现有代码,使其更符合设计模式的思想,提升软件的整体架构质量。

    非常有用的设计模式小合集

    在极限编程中,设计模式被用来提高代码的灵活性和可维护性,例如,重构是XP的一个关键实践,通过重构可以引入合适的设计模式,使代码结构更加清晰,易于理解。 设计模式迷你手册可能包含了一些简洁易懂的实例,以...

    设计模式复习笔记大全

    ### 设计模式复习笔记大全 #### 一、设计模式概览 **设计模式**是一种用于在特定场景下解决常见设计问题的方案。它通常描述了一组相互作用的类和对象,以及这些对象如何通信来解决问题。设计模式的核心要素包括...

    23个设计模式之一的装饰ppt-java-极客学院

    装饰模式是一种结构型设计模式,它允许我们向一个对象动态地添加新的行为或属性,而无需修改原有对象的代码。这种模式在Java等面向对象语言中广泛应用,因为它提供了对类扩展的一种灵活方式,避免了使用继承带来的...

    设计模式 设计模式

    3. **系统重构**:在对已有系统进行重构的过程中,适当引入设计模式能够帮助开发者更好地理解和优化代码。 ### 结论 设计模式是软件工程领域中非常重要的组成部分,它们不仅能够帮助开发者编写出高质量的代码,还...

    设计模式可复用面向对象软件的基础.zip

    书名: 设计模式可复用面向对象软件的基础 英文原书名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 书号: 7-111-07575-7 页码: 254 定价...

Global site tag (gtag.js) - Google Analytics