`
252190908
  • 浏览: 228912 次
文章分类
社区版块
存档分类
最新评论

软件设计模式之装饰模式(Darren)

 
阅读更多

各位博友晚上好,又到了每天和大家分享学习成果的时候了,前几天一直在学习设计模式中的3大原则:单一职责,开放封闭,依赖倒转原则,今天终于走上正路开始学习装饰模式l了,闲话少说,先来介绍一下装饰模式:

定义:动态的给一个对象添加额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

装饰模式

Component是定义了一个对象的接口,可以给这些对象动态的添加职责,ConcreteComponent是一个定义了一个具体的对象,也可以给这个对象动态的添加一些职责,Decorator是一个抽象装饰类,它继承自Component,从外类来扩展Component,但对于Component来说,它是不用自导Decorator的存在的,至于ConcreateDecorator就是具体的装饰对象,起到给Component起到添加职责的功能。

装饰模式是利用SetComponent来对对象进行包装,这样每个装饰对象就和如何使用这个对象分离开了,每个装饰对象只关心自己的功能,不用关系如何被添加到对象链当中。

如果只有一个ConcreteComponent类而没有Component类,那么Decorator可以是ConCreateCompoent的一个子类,同样的道理,如果只有一个Decorator类和ConcreatCompoent合并到一个类。

系统的总结一下装饰模式:

装饰模式是为了给已有的功能添加更多功能的一种方式。

当系统需要更新功能的时候,是向旧的类中添加新的代码。这些代码通常装饰了原有类的核心功能和职责。

比如所在主类中添加了新的字段,方法,逻辑,从而增加了主类的复杂度,而这些新加入的功能仅仅是为了满足一些某种特定情况下才会执行的特殊行为的需要,而装饰模式却提供了一个很好的解决方案,它把每个装饰的功能放在单独的类中,并让这个类包装它要装饰的对象,因此,当要执行特殊需要时,客户端代码可以在运行时根据需要有选择的,按顺序的使用装饰功能来包装对象。

装饰模式的优点:

把类中原有的装饰功能从类中搬出,这样可以简化原有的类。更有效的将装饰功能和类的核心功能区分开来,而且可以去除相关类中重复的装饰逻辑。

天色已晚,各位博友也早些休息吧,感谢对Darren博客的支持Darren

分享到:
评论

相关推荐

    Darren设计之美,设计模式应该怎么学习

    Darren设计之美

    essayJoke-1:红橙Darren仿写内涵段子

    essayJoke 红橙Darren仿写内涵段子

    Darren-s-project

    Darren-s-project

    darren_comm:通用代码

    darren_comm 通用代码

    darren9080.github.io

    darren9080.github.io

    Learn_darren_eassy_joke

    Learn_darren_eassy_joke

    A Practical Guide to Computer F - Darren R. Hayes

    电子取证行业一部知识点全面的书籍,适合电子取证不同阶段的人员阅读

    Darren-greenhand.github.io

    Darren-greenhand.github.io

    The-Compound-Effect-By-darren-Hardy.pdf

    This powerful, practical book, based on years of proven and profi table experience, shows you how to leverage your special talents to maximize the opportunities surrounding you. The Compound Effect is...

    通讯录-快读滑动

    这是一个类似通讯录,使用的是AlphabetIndexer快读定位

    《AJAX实战》

    内容提要 本书是目前Ajax领域最为全面深入的一本著作,其中不仅有对于基础知识的介绍,还有对于Ajax开发中重大的体系架构问题的深入探讨,总结了大量Ajax开发中的设计模式,并讨论了框架、安全性与性能等等。...

    Ajax实战中文版

     《Ajax实战》是目前Ajax领域最为全面深入的一本著作,其中不仅有对于基础知的的介绍,还有对于Ajax开发中重大架构问题的深入探讨,总结了大量Ajax开发中的设计模式,并讨论了框架、安全性与性能等。书中提供了几个...

    深入解析Spring+MVC与Web+Flow.pdf

    《深入解析Spring MVCgn Web Flow》还介绍了Spring 框架的设计模式,以及如何将同样的设计和技术应用到读者自己的代码中。 《深入解析Spring MVCgn Web Flow》适合各层次Spring Web 程序员阅读。 编辑推荐 《深入...

    下拉刷新ScrollView

    可以下拉刷新的scrollView,代码可以运行注释也很详细,是个不错的资源

    darren_budget_tracker

    单元18 PWA作业:在线/离线预算跟踪器 向我们现有的Budget Tracker应用程序中添加功能,以允许脱机访问和功能。 无论有没有连接,用户都可以在他们的预算中增加支出和存款。 脱机输入事务时,它们应在重新联机后...

    Petful-Client-Marina-Darren

    小巧的客户端应用概括Petful是另一种动物庇护所。 宠物应用程序的访问者只能收养在那里逗留时间最长的狗和/或猫。 领养宠物后,下一个可用的宠物将变为可用。科技栈该应用是使用React.js,Redux,Node.js和Express...

    honours_project:达伦·拉利(Darren Lally)的荣誉项目,学生编号

    honours_project Darren Lally的Honors项目,学生编号:S1622370-该项目是使用Django Web Framework开发的。 项目名称:调查哪些因素有助于使用Python和Django-FrameworkSwift发展,而不是使用PHP来开发Web应用程序...

    game-design-documents:在这个存储库中,我将放置有关游戏设计的好东西的链接

    Darren Korb:晶体管之声 量子——埃里克·齐默尔曼 Grim Fandango 的制作 编程 游戏编程模式书 编码游戏 WebGL 工作坊 3D 计算机图形简介 面向对象编程初学者指南 设计文件 编写您的团队可以实际使用的 GDD 老...

    操作系统实验 模拟软件

    操作系统实验的模拟软件 VC++编写 需要源代码请另行索取

    Git绿色强大的备份软件

    Git,文件、代码工程等备份软件,广泛用于项目工程备份 Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 本资源无需注册、破解,可直接下载安装使用,内...

Global site tag (gtag.js) - Google Analytics