设计模式
文章平均质量分 93
天上下橙雨
学海无涯。
展开
-
设计模式学习(二十四):访问者模式
目录一、前言二、访问者模式三、示例介绍四、结构与参与者五、协作六、简单的示例代码七、总结7.1 优缺点7.2 应用场景一、前言设计模式的基础学习进入了尾声,本周在家看了一下《设计模式:可复用面向对象软件的基础》中介绍的最后一个设计模式——访问者模式,在此写篇博客记录一下。虽然通过阅读《设计模式:可复用面向对象软件的基础》以及与同事开展研讨会学习了各种设计模式,但这还远远不够,后续需要在实践中应用这些设计模式,写出易扩展、易用、易维护的代码,提高自己的开发能力。二、访问者模式访问者模式:表示一个作用原创 2021-12-26 15:53:39 · 510 阅读 · 0 评论 -
设计模式学习(二十三):模板方法
目录一、前言二、模板方法三、示例介绍四、结构与参与者五、协作六、总结6.1 优缺点6.2 应用场景一、前言近期参加了第十七次设计模式研讨会,主题是模板方法,接下来我们来看看该模式的具体内容。二、模板方法模板方法:在模板方法中,一个抽象类公开定义了执行它的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类定义的方式进行。这种类型的设计魔术属于类行为型模式。意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod 使得子类可以不改变一个算法的结构即可重定义该算原创 2021-11-07 20:15:46 · 101 阅读 · 0 评论 -
设计模式学习(二十二):策略模式
目录一、前言二、策略模式三、示例介绍四、结构与参与者五、协作六、简单的示例代码七、总结7.1 优缺点7.2 应用场景一、前言近期参加了第十六次设计模式研讨会,主题是策略模式,接下来我们来看看该模式的具体内容。二、策略模式策略模式:在状态模式中,一个类的行为或其算法可以在运行时修改,它属于行为模式。在该模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的context对象,策略对象改变context对象的执行算法。意图:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本原创 2021-10-24 19:53:43 · 134 阅读 · 0 评论 -
设计模式学习(二十一):状态模式
目录一、前言二、状态模式三、示例介绍四、结构与参与者五、协作六、简单的示例代码七、总结7.1 优缺点7.2 应用场景一、前言国庆假期前参加了第十五次设计模式研讨会,主题是状态模式,接下来我们来看看该模式的具体内容。二、状态模式状态模式:在状态模式中,类的行为是基于它的状态改变的,它属于行为模式。意图:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。主要解决:该模式主要用于解决对象行为依赖于它的状态(属性)的问题,可以根据对象的状态改变而改变对象的行为。比如,TCP协议网原创 2021-10-07 18:50:06 · 138 阅读 · 0 评论 -
设计模式学习(二十):观察者模式
目录一、前言二、观察者模式三、示例介绍一、前言本周参加了第十四次设计模式研讨会,主题是观察者模式,接下来我们来看看该模式的具体内容。二、观察者模式观察者模式:当对象间存在一对多关系时,则使用观察者模式。比如当一个对象被修改时,则会自动通知依赖它的对象,该模式属于行为型模式。意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。主要解决:该模式主要用于解决一个对象状态改变时通知其他对象的问题,而且要考虑到易用性和低耦合,保证高度的协作。比如原创 2021-09-22 22:12:14 · 170 阅读 · 0 评论 -
设计模式学习(十九):备忘录模式
目录一、前言二、备忘录模式三、示例介绍四、结构与参与者五、协作六、总结6.1 优缺点6.2 应用场景一、前言本周参加了第十三次设计模式研讨会,主题是备忘录模式,接下来我们来看看该模式的具体内容。二、备忘录模式备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。主要解决:该模式主要用于解决允许用户取消操作或者从错误中恢复操作的需求。比如,原创 2021-09-05 18:12:39 · 126 阅读 · 0 评论 -
设计模式学习(十八):中介者模式
目录一、前言二、中介者模式三、示例介绍四、结构与参与者五、简单的示例代码六、总结6.1 优缺点6.2 应用场景一、前言本周参加了第十二次设计模式研讨会,主题是中介者模式,接下来我们来看看该模式的具体内容。二、中介者模式中介者模式:它用来降低多个对象和类之间的交互复杂性,它提供了一个中介类,该类通常处理不同类之间的交互,并支持松耦合,使代码易于维护。意图:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。主要解决:如果对象原创 2021-08-15 14:31:39 · 159 阅读 · 0 评论 -
设计模式学习(十七):迭代器模式
目录一、前言二、迭代器模式三、示例介绍四、结构与参与者五、简单的示例代码六、总结6.1 优缺点6.2 应用场景一、前言本周没有开展设计模式研讨会,但周末学习了迭代器模式,此处做个记录。二、迭代器模式迭代器模式:它用于顺序访问集合对象的元素,用户不需要知道集合对象的底层表示。意图:提供一种方法顺序访问一个聚合对象中各个元素 , 而又不需暴露该对象的内部表示。主要解决:该模式主要解决以不同的方式来遍历整个整合对象。三、示例介绍一个聚合对象, 如列表(list), 应该提供一种方法来让别人可以访问原创 2021-08-01 14:24:40 · 141 阅读 · 0 评论 -
设计模式学习(十六):解释器模式
目录一、前言二、解释器模式三、示例介绍四、结构与参与者五、总结5.1 优缺点5.2 应用场景一、前言本周参加了第十一次设计模式研讨会,主题是解释器模式,接下来我们来看看该模式的具体内容。二、解释器模式解释器模式:它提供了评估语言的语法或表达式的方法,实现一个表达式接口,该接口解析一个特定的上下文。意图:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。主要解决:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言原创 2021-07-18 16:48:27 · 135 阅读 · 0 评论 -
设计模式学习(十五):命令模式
目录一、前言二、命令模式三、示例介绍四、结构与参与者五、简单的示例代码六、总结6.1 优缺点6.2 应用场景一、前言本周参加了第十次设计模式研讨会,主题是命令模式,接下来我们来看看该模式的具体内容。二、命令模式命令模式:本质是对命令进行封装,将发出命令的责任和执行命令的责任分开。意图:将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;比如,对请求排队或记录请求日志,以及支持可撤消的操作。主要解决:在某些场合,比如要对行为进行“记录、撤销、事务”等处理,这样将行为使用无法抵御变化原创 2021-07-04 18:59:42 · 169 阅读 · 0 评论 -
设计模式学习(十四):职责链模式
目录一、前言二、职责链模式三、示例介绍四、结构与参与者五、AWTK中的应用六、总结6.1 优缺点6.2 应用场景一、前言本周参加了第九次设计模式研讨会,主题是职责链模式,接下来我们来看看该模式的具体内容。二、职责链模式职责链模式:为请求创建了一个接受者对象的链。该模式给予请求的类型,对请求的发送者和接受者进行解耦。意图:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。主要解决:职责链上的处理者负责处理原创 2021-06-14 20:46:09 · 156 阅读 · 0 评论 -
设计模式学习(十三):代理模式
目录一、前言二、代理模式三、示例介绍四、结构与参与者五、简单的示例代码六、总结6.1 优缺点6.2 应用场景一、前言本周参加了第八次设计模式研讨会,主题是代理(Proxy)模式,接下来我们来看看该模式的具体内容。二、代理模式Proxy 模式:在该模式中,一个类代表另一个类的功能,我们创建具有现有对象的对象,以便向外界提供功能接口。意图:为其他对象提供一种代理以控制对这个对象的访问。动机:在某些情况下,一个客户不想或者不能直接引用一个对象,此时可以通过一个称之为“代理”的第三者来实现间接引用。核原创 2021-05-29 22:27:27 · 91 阅读 · 0 评论 -
设计模式学习(十二):享元模式
目录一、前言二、享元模式三、示例介绍四、结构与参与者五、简单的示例代码六、总结6.1 适用性6.2 优缺点和应用场景一、前言本周参加了第七次设计模式研讨会,主题是享元(Flyweight)模式,接下来我们来看看该模式的具体内容。二、享元模式Flyweight 模式:通过共享技术实现相同或相似对象的重用,减少创建对象的数量,以减少内存占用和提高性能。意图:运用共享技术有效地支持大量细粒度的对象。动机:面向对象技术可以很好地解决一些灵活性或可扩展性问题,但在很多情况下需要在系统中增加类和对象的个数。原创 2021-05-16 14:02:24 · 151 阅读 · 0 评论 -
设计模式学习(十一):外观模式
目录一、前言二、外观模式三、实际例子四、结构与参与者四、简单的示例代码五、总结一、前言本周参加了第六次设计模式研讨会,主题是外观(FACADE)模式,接下来我们来看看该模式的具体内容。二、外观模式FACADE 模式:隐藏系统的复杂性,并向客户端提供一个客户端可以访问系统的接口。意图:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。实现核心:在客户端和复杂系统之原创 2021-04-18 19:18:56 · 83 阅读 · 0 评论 -
设计模式学习(十):装饰模式
目录一、前言二、装饰模式三、实际例子四、结构与参与者五、简单的示例代码六、总结一、前言装饰(Decorator)模式主要是在组合(Composite)模式的基础上扩展,因此并不为其专门开一次研讨会,在闲余时间自行学习,接下来我们来看看该模式的具体内容。组合(Composite)模式的具体内容详见:设计模式学习(九):组合模式。二、装饰模式Decorator 模式:允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。意图:动态地给原创 2021-04-11 19:56:57 · 222 阅读 · 0 评论 -
设计模式学习(九):组合模式
目录一、前言二、组合模式三、实际例子四、结构与参与者五、总结一、前言本周参加了第五次设计模式研讨会,主题是组合(Composite)模式,接下来我们来看看该模式的具体内容。二、组合模式Composite 模式:把一组相似的对象当作一个单一的对象。意图:将对象组合成树形结构以表示“部分-整体”的层次结构。 Composite使得用户对单个对象和组合对象的使用具有一致性。主要解决:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序原创 2021-04-05 21:35:49 · 228 阅读 · 0 评论 -
设计模式学习(八):桥接模式
目录一、前言二、桥接模式三、实际例子四、结构与参与者五、总结一、前言本周参加了第四次设计模式研讨会,主题是桥接(Bridge)模式,接下来我们来看看该模式的具体内容。二、桥接模式Bridge 模式:将抽象化与实现化解耦,使得二者可以独立变化。意图:将抽象部分与它的实现部分分离,使它们都可以独立地变化。主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。举个例子:墙上的开关。可以看到的开关是抽象的,不用管里面具体怎么实现。三、实际例子在一个用户界面工具箱中,有一个可原创 2021-03-22 20:55:24 · 121 阅读 · 0 评论 -
设计模式学习(七):适配器模式及其在AWTK中的应用
目录一、前言二、适配器模式三、实际例子四、结构与参与者4.1 类适配器(多重继承)4.2 对象适配器(依赖对象组合)4.3 参与者4.4 两种适配器实现的比较五、适配器模式在AWTK中的应用六、总结一、前言本周参加了第三次设计模式研讨会,主题是适配器(Adapter)模式,接下来我们来看看该模式的具体内容。二、适配器模式Adapter模式:将一个类的接口转换成用户希望的另一个接口。意图:使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。主要解决:主要解决在软件系统中,常常要将一些“现存的原创 2021-03-06 19:14:01 · 367 阅读 · 0 评论 -
设计模式学习(六):原型模式及其在AWTK中的应用
目录一、前言二、原型模式三、原型模式在AWTK中的应用四、总结4.1 优缺点5.1 适用场景一、前言原型模式(Prototype Pattern)相对比较简单,因此并不为其专门开一次研讨会,在闲余时间自行学习,接下来我们来看看该模式的具体内容。二、原型模式原型模式即实现一个原型接口,该接口用于创建当前对象的克隆。意图:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对原创 2021-03-06 13:36:40 · 245 阅读 · 0 评论 -
设计模式学习(五):单例模式及其优化示例(C语言)
一、前言单例模式(Singleton Pattern)是最简单的设计模式之一,因此并不为其专门开一次研讨会,在闲余时间自行学习,接下来我们来看看该模式的具体内容。、二、单例模式单例模式即保证一个类仅有一个实例,并提供一个访问它的全局访问点单例模式本质上就是让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建(通过截取创建新对象的请求),并且它可以提供一个访问该实例的方法。由此可见,单例模式主要是用来避免 一个全局使用的类被频繁地创建与销毁 的情况,当我们想控制实例数目或者节省系统资原创 2021-02-24 22:27:11 · 380 阅读 · 0 评论 -
设计模式学习(四):基于Builder模式的歌词解析器
一、前言上篇文章(设计模式学习(三):生成器(Builder)模式)记录了 Builder 模式的具体内容,这次使用C语言来实现一个实际的例子——基于Builder模式的歌词解析器。二、示例介绍歌词文件(.lrc)是一种文本文件,用来描述歌曲的歌词。在该文件的帮助下,音乐播放器可以根据相应时间同步显示歌词。歌词文件由时间标签、ID标签和歌词组成。时间标签,例如:[00:23.25]ID标签,例如:[ar:谭咏麟]歌词,例如:凄雨冷风中 多少繁华如梦下面是谭咏麟先生的歌曲 水中花 歌词的截原创 2021-02-21 18:59:01 · 214 阅读 · 0 评论 -
设计模式学习(三):生成器(Builder)模式
一、前言本周参加了第二次设计模式研讨会,主题是生成器(Builder)模式,接下来我们来看看该模式的具体内容。二、生成器模式生成器(Builder)模式是一个很常用模式。《设计模式——可复用面向对象软件的基础》书中说,它的意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。这句话刚开始看很难理解,什么是构建、创建、表示?打个简单的比方:假如我们现在要建房子,房子是一个复杂对象(也就是最终产品),砖头、钢筋和水泥是建筑材料(即复杂对象中包含的子对象),生产这些材料的过程就是原创 2021-02-07 13:40:31 · 313 阅读 · 0 评论 -
设计模式学习(二):实现可动态注册的简单工厂模式(C语言)
一、前言上周学习了抽象工厂模式,该模式包含了简单工厂模式和工厂方法的某些特性,三者之间的区别详见:上周博客,本周深入了解一下简单工厂模式,并对其进行优化,实现一个可动态注册的简单工厂,本次练习参考了AWTK源码中 widget_factory 的实现,感兴趣的可以查阅源码,GitHub仓库:https://github.com/zlgopen/awtk。AWTK是 ZLG 开发的开源 GUI 引擎,官网地址:https://www.zlg.cn/index/pub/awtk.html。二、简单原创 2021-01-31 13:47:48 · 404 阅读 · 0 评论 -
设计模式学习(一):抽象工厂模式以及C语言示例
一、前言近期有幸参加了李先静李老师组织的设计模式研讨会,与各位同事共同学习探讨设计模式的相关知识,往后的大多数的博客内容将会围绕设计模式的学习展开。研讨会内容参考书籍《设计模式——可复用面向对象软件的基础 》,博客中也会大量引用这本书里的定义,但这本书的翻译真的晦涩难读,在博客中我尽量用一些通俗的描述代替,也方便以后自己查阅。李老师博客地址:http://blog.csdn.net/absurd。二、抽象工厂模式抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂原创 2021-01-24 14:10:51 · 399 阅读 · 2 评论