设计模式
文章平均质量分 60
程序员三木
[CSDN全栈领域优秀创作者| 阿里云博客社区专家博主] 作为某云服务提供商的后端开发人员,我将在这里与大家简要分享一些实用的开发小技巧。在我的职业生涯中积累了丰富的经验,希望能通过这个博客与大家交流、学习和成长。
展开
-
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
模板方法模式是一种基于继承的代码复用技术,它体现了面向对象的诸多重要思想,是一种使用频率较高的模式。模板方法模式广泛应用于框架设计(例如Spring、JUnit等)中,以确保通过父类来控制处理流程的逻辑顺序(例如框架的初始化、测试流程的设置等)。原创 2024-02-29 22:48:28 · 999 阅读 · 0 评论 -
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
状态模式将一个对象在不同状态下的不同行为封装在一个个状态类中。通过设置不同的状态对象可以让环境对象拥有不同的行为,而状态转换的细节对于客户端而言是透明的,方便了客户端的使用。在实际开发中,状态模式具有较高的使用频率,在工作流、游戏等软件中状态模式都得到了广泛应用,例如公文状态的转换、游戏中角色的升级等。原创 2024-02-28 22:14:05 · 1404 阅读 · 3 评论 -
[设计模式Java实现附plantuml源码~行为型] 撤销功能的实现——备忘录模式
备忘录模式在很多软件的使用过程中普遍存在,但是在应用软件开发中,它的使用频率并不太高,因为现在很多基于窗体和浏览器的应用软件并没有提供撤销操作。如果需要为软件提供撤销功能,备忘录模式无疑是一种很好的解决方案。在一些字处理软件、图像编辑软件、数据库管理系统等软件中备忘录模式都得到了很好的应用。原创 2024-02-27 08:30:00 · 1057 阅读 · 2 评论 -
[设计模式Java实现附plantuml源码~行为型]算法的封装与切换——策略模式
策略模式用于算法的自由切换和扩展,它是应用较为广泛的设计模式之一。策略模式对应于解决某一问题的一个算法族,允许用户从该算法族中任选一个算法来解决某一问题,同时可以方便地更换算法或者增加新的算法。只要涉及算法的封装、复用和切换都可以考虑使用策略模式。原创 2024-02-26 22:16:22 · 1078 阅读 · 0 评论 -
[设计模式Java实现附plantuml源码~行为型]对象间的联动~观察者模式
观察者模式是一种使用频率非常高的设计模式,无论是移动应用、Web应用或者桌面应用,观察者模式几乎无处不在。它为实现对象之间的联动提供了一套完整的解决方案,凡是涉及一对一或者一对多的对象交互场景都可以使用观察者模式。观察者模式广泛应用于各种编程语言的GUI事件处理的实现,在基于事件的XML解析技术(例如SAX2)以及Web事件处理中也都使用了观察者模式。原创 2024-02-25 20:31:51 · 973 阅读 · 0 评论 -
[设计模式Java实现附plantuml源码~行为型]协调多个对象之间的交互——中介者模式
中介者模式将一个网状的系统结构变成一个以中介者对象为中心的星形结构。在这个星形结构中,使用中介者对象与其他对象的一对多关系来取代原有对象之间的多对多关系。中介者模式在事件驱动类软件中应用较为广泛,特别是基于GUI的应用软件。此外,在类与类之间存在错综复杂的关联关系的系统中,中介者模式都得到了较好的应用。原创 2024-02-22 08:30:00 · 1915 阅读 · 3 评论 -
[设计模式Java实现附plantuml源码~行为型]遍历聚合对象中的元素——迭代器模式
迭代器模式是一种使用频率非常高的设计模式,通过引入迭代器可以将数据的遍历功能从聚合对象中分离出来。聚合对象只负责存储数据,而遍历数据由迭代器来完成。由于很多编程语言的类库都已经实现了迭代器模式,因此在实际开发中,只需要直接使用Java、C#等语言已定义好的迭代器即可。迭代器已经成为操作聚合对象的基本工具之一。原创 2024-02-22 07:30:00 · 1556 阅读 · 0 评论 -
[设计模式Java实现附plantuml源码~行为型]请求发送者与接收者解耦——命令模式
命令模式是一种使用频率非常高的设计模式,用于将请求发送者与接收者解耦。请求发送者通过命令对象来间接引用请求接收者,使得系统具有更好的灵活性和可扩展性。在基于GUI的软件开发,无论是计算机桌面应用还是移动应用中命令模式都得以广泛应用。原创 2024-02-19 23:58:01 · 843 阅读 · 2 评论 -
[设计模式Java实现附plantuml源码~行为型]请求的链式处理——职责链模式
职责链模式通过建立一条链来组织请求的处理者。请求将沿着链进行传递,请求发送者无须知道请求在何时、何处以及如何被处理,实现了请求发送者与处理者的解耦。在软件开发中,如果遇到有多个对象可以处理同一请求时可以应用职责链模式。例如,在Web应用开发中创建一个过滤器(Filter)链来对请求数据进行过滤,在工作流系统中实现公文的分级审批等,使用职责链模式可以较好地解决此类问题。原创 2024-02-07 21:13:29 · 1961 阅读 · 0 评论 -
[设计模式Java实现附plantuml源码~结构型]实现对象的复用——享元模式
当系统中存在大量相同或者相似的对象时,享元模式是一种较好的解决方案。它通过共享技术实现相同或相似的细粒度对象的复用,从而节约了内存空间,提高了系统性能。相比其他结构型设计模式,享元模式的使用频率并不算太高,但是作为一种以“节约内存,提高性能”为出发点的设计模式,它在软件开发中还是得到了一定程度的应用。原创 2024-02-06 06:30:00 · 772 阅读 · 1 评论 -
[设计模式Java实现附plantuml源码~结构型]处理多维度变化——桥接模式
(1)分离抽象接口及其实现部分。桥接模式使用“对象间的关联关系”解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化(即抽象和实现不再在同一个继承层次结构中,而是“子类化”它们,使它们各自都具有自己的子类,以便任意组合子类,从而获得多维度组合对象)。(2)在很多情况下,桥接模式可以取代多层继承方案。多层继承方案违背了单一职责原则,复用性较差,且类的个数非常多。桥接模式是比多层继承方案更好的解决方法,它极大地减少了子类的个数。(3)桥接模式提高了系统的可扩展性。原创 2024-02-04 23:00:14 · 1395 阅读 · 0 评论 -
[设计模式Java实现附plantuml源码~结构型]不兼容结构的协调——适配器模式
(1)将目标类和适配者类解耦。通过引入一个适配器类来重用现有的适配者类,无须修改原有结构。(2)增加了类的透明性和复用性。将具体的业务实现过程封装在适配者类中,对于客户端类而言是透明的,而且提高了适配者类的复用性,同一个适配者类可以在多个不同的系统中复用。(3)灵活性和扩展性都非常好。通过使用配置文件,可以很方便地更换适配器,也可以在不修改原有代码的基础上增加新的适配器类,完全符合开闭原则。原创 2024-01-31 21:05:16 · 1278 阅读 · 0 评论 -
[设计模式Java实现附plantuml源码~结构型]对象的间接访问——代理模式
(1)代理模式能够协调调用者和被调用者,在一定程度上降低了系统的耦合度,满足迪米特法则。(2)客户端可以针对抽象主题角色进行编程,增加和更换代理类无须修改源代码,符合开闭原则,系统具有较好的灵活性和可扩展性。(3)远程代理为位于两个不同地址空间对象的访问提供了一种实现机制,可以将一些消耗资源较多的对象和操作移至性能更好的计算机上,提高系统的整体运行效率。(4)虚拟代理通过一个消耗资源较少的对象来代表一个消耗资源较多的对象,可以在一定程度上节省系统的运行开销。原创 2024-01-30 21:18:37 · 1341 阅读 · 0 评论 -
[设计模式Java实现附plantuml源码~结构型]树形结构的处理——组合模式
(1)组合模式可以清楚地定义分层次的复杂对象,表示对象的全部或部分层次。它让客户端忽略了层次的差异,方便对整个层次结构进行控制。(2)客户端可以一致地使用一个组合结构或其中单个对象,不必关心处理的是单个对象还是整个组合结构,简化了客户端代码。(3)在组合模式中增加新的容器构件和叶子构件都很方便,无须对现有类库进行任何修改,符合开闭原则。(4)组合模式为树形结构的面向对象实现提供了一种灵活的解决方案。通过叶子对象和容器对象的递归组合,可以形成复杂的树形结构,但对树形结构的控制却非常简单。原创 2024-01-28 16:27:29 · 1287 阅读 · 0 评论 -
[设计模式Java实现附plantuml源码~结构型] 扩展系统功能——装饰模式
装饰模式降低了系统的耦合度,可以动态地增加或删除对象的职责,并使得需要装饰的具体构件类和具体装饰类可以独立变化,以便增加新的具体构件类和具体装饰类。在软件开发中,装饰模式应用较为广泛,例如在Java IO中的输入流和输出流的设计、javax.swing包中一些图形界面构件功能的增强等地方都运用了装饰模式。原创 2024-01-27 17:54:14 · 1363 阅读 · 0 评论 -
[设计模式Java实现附plantuml源码~结构型] 提供统一入口——外观模式
在软件开发中,有时候为了完成一项较为复杂的功能,一个类需要和多个其他业务类交互,而这些需要交互的业务类经常会作为一个完整的整体出现,由于涉及的类比较多,导致使用时代码较为复杂。此时,特别需要一个类似服务员一样的角色,由它来负责和多个业务类进行交互,而使用这些业务类的类只需和该类交互即可。外观模式通过引入一个新的外观类来实现该功能。外观类充当了软件系统中的“服务员”,它为多个业务类的调用提供了一个统一的入口,简化了类与类之间的交互。原创 2024-01-26 00:34:47 · 998 阅读 · 1 评论 -
[设计模式Java实现附plantuml源码~创建型] 复杂对象的组装与创建——建造者模式
(1)在建造者模式中,客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。(2)每个具体建造者都相对独立,而与其他具体建造者无关。因此,可以很方便地替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不同的产品对象。由于指挥者类针对抽象建造者编程,增加新的具体建造者无须修改原有类库的代码,系统扩展方便,符合开闭原则。(3)可以更加精细地控制产品的创建过程。原创 2024-01-25 07:30:00 · 1653 阅读 · 3 评论 -
[设计模式Java实现附plantuml源码~创建型] 对象的克隆~原型模式
`Client`(客户类):让一个原型对象克隆自身从而创建一个新的对象,在客户类中只需要直接实例化或通过工厂方法等方式创建一个原型对象,再通过调用该对象的克隆方法即可得到多个相同的对象。由于客户类针对抽象原型类Prototype编程,因此用户可以根据需要选择具体原型类,系统具有较好的可扩展性,增加或更换具体原型类都很方便。原创 2024-01-22 22:41:29 · 1248 阅读 · 0 评论 -
[设计模式Java实现附plantuml源码~创建型] 产品族的创建——抽象工厂模式
(1)抽象工厂模式隔离了具体类的生成,使得客户并不需要知道什么被创建。由于这种隔离,更换一个具体工厂就变得相对容易,所有的具体工厂都实现了在抽象工厂中声明的那些公共接口,因此只需改变具体工厂的实例,就可以在某种程度上改变整个软件系统的行为。(2)当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象。(3)增加新的产品族很方便,无须修改已有系统,符合开闭原则。原创 2024-01-21 10:30:00 · 1338 阅读 · 1 评论 -
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题。原创 2024-01-21 10:00:00 · 1365 阅读 · 0 评论 -
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
简单工厂模式提供了专门的工厂类用于创建对象,将对象的创建和对象的使用分离开,它作为一种最简单的工厂模式在软件开发中得到了较为广泛的应用。原创 2024-01-18 12:00:00 · 1315 阅读 · 4 评论 -
[设计模式Java实现附plantuml源码~创建型] 确保对象的唯一性~单例模式
单例模式作为一种目标明确、结构简单、理解容易的设计模式,在软件开发中使用频率相当高,在很多应用软件和框架中都得以广泛应用。原创 2024-01-18 06:30:00 · 1858 阅读 · 1 评论 -
[设计模式 Go实现] 结构型~代理模式
代理模式用于延迟处理操作或者在进行实际操作前后进行其它处理。原创 2024-01-08 21:57:54 · 500 阅读 · 4 评论 -
[设计模式 Go实现] 结构型~享元模式
享元模式从对象中剥离出不发生改变且多个实例需要的重复数据,独立出一个享元,使多个对象共享,从而节省内存以及减少对象数量。原创 2024-01-08 21:57:03 · 686 阅读 · 0 评论 -
[设计模式 Go实现] 结构型~外观模式
API 为facade 模块的外观接口,大部分代码使用此接口简化对facade类的访问。facade模块同时暴露了a和b 两个Module 的NewXXX和interface,其它代码如果需要使用细节功能时可以直接调用。原创 2024-01-07 16:27:22 · 890 阅读 · 4 评论 -
[设计模式 Go实现] 结构型~组合模式
组合模式统一对象和对象集,使得使用相同接口使用对象和对象集。组合模式常用于树状结构,用于统一叶子节点和树节点的访问,并且可以用于应用某一操作到所有子节点。原创 2024-01-07 16:26:35 · 664 阅读 · 0 评论 -
[设计模式 Go实现] 结构型~装饰模式
装饰模式使用对象组合的方式动态改变或增加对象行为。Go语言借助于匿名组合和非入侵式接口可以很方便实现装饰模式。使用匿名组合,在装饰器中不必显式定义转调原对象方法。原创 2024-01-06 18:37:34 · 800 阅读 · 3 评论 -
[设计模式 Go实现] 结构型~适配器模式
适配器模式用于转换一种接口适配另一种接口。实际使用中Adaptee一般为接口,并且使用工厂函数生成实例。在Adapter中匿名组合Adaptee接口,所以Adapter类也拥有SpecificRequest实例方法,又因为Go语言中非入侵式接口特征,其实Adapter也适配Adaptee接口。原创 2024-01-06 18:36:59 · 778 阅读 · 0 评论 -
[设计模式 Go实现] 行为型~职责链模式
职责链模式用于分离不同职责,并且动态组合相关职责。同时可在职责链类中实现职责接口相关函数,使职责链对象可以当做一般职责对象是用。原创 2024-01-01 14:51:00 · 801 阅读 · 2 评论 -
[设计模式 Go实现] 行为型~解释器模式
解释器模式定义一套语言文法,并设计该语言解释器,使用户能使用特定文法控制解释器行为。解释器模式的意义在于,它分离多种复杂功能的实现,每个功能只需关注自身的解释。对于调用者不用关心内部的解释器的工作,只需要用简单的方式组合命令就可以。原创 2024-01-05 06:30:00 · 709 阅读 · 3 评论 -
[设计模式 Go实现] 行为型~迭代器模式
送代器模式用于使用相同方式送代不同类型集合或者隐藏集合类型的具体实现。可以使用送代器模式使遍历同时应用送代策略,如请求新对象、过滤、处理对象等。原创 2024-01-05 00:15:00 · 399 阅读 · 1 评论 -
[设计模式 Go实现] 行为型~中介者模式
中介者模式封装对象之间互交,使依赖变的简单,并且使复杂互交简单化,封装在中介者中。例子中的中介者使用单例模式生成中介者。中介者的change使用switch判断类型。原创 2024-01-04 00:15:00 · 397 阅读 · 2 评论 -
[设计模式 Go实现] 行为型~备忘录模式
备忘录模式用于保存程序内部状态到外部,又不希望暴露内部状态的情形。程序内部状态使用窄接口船体给外部进行存储,从而不暴露程序实现细节。备忘录模式同时可以离线保存内部状态,如保存到数据库,文件等。原创 2024-01-04 08:00:00 · 473 阅读 · 2 评论 -
[设计模式 Go实现] 行为型~观察者模式
观察者模式用于触发联动。一个对象的改变会触发其它观察者的相关动作,而此对象无需关心连动对象的具体实现。原创 2024-01-03 10:00:00 · 530 阅读 · 0 评论 -
[设计模式 Go实现] 行为型~状态模式
状态模式用于分离状态和行为。原创 2024-01-03 06:00:00 · 901 阅读 · 3 评论 -
[设计模式 Go实现] 行为型~策略模式
定义一系列算法,让这些算法在运行时可以互换,使得分离算法,符合开闭原则。原创 2024-01-02 07:30:00 · 346 阅读 · 0 评论 -
[设计模式 Go实现] 行为型~模板方法模式
模版方法模式使用继承机制,把通用步骤和通用方法放到父类中,把具体实现延迟到子类中实现。使得实现符合开闭原则。如实例代码中通用步骤在父类中实现(准备下载保存收尾)下载和保存的具体实现留到子类中,并且提供保存方法的默认实现。因为Golang不提供继承机制,需要使用匿名组合模拟实现继承。此处需要注意:因为父类需要调用子类方法,所以子类需要匿名组合父类的同时,父类需要持有子类的引用。原创 2024-01-02 07:30:00 · 695 阅读 · 3 评论 -
[设计模式 Go实现] 行为型~访问者模式
访问者模式可以给一系列对象透明的添加功能,并且把相关代码封装到一个类中。对象只要预留访问者接口Accept则后期为对象添加功能的时候就不需要改动对象。原创 2024-01-01 14:43:17 · 580 阅读 · 0 评论 -
[设计模式 Go实现] 创建型~ 原型模式
原型模式使对象能复制自身,并且暴露到接口中,使客户端面向接口编程时,不知道接口实际对象的情况下生成新的对象。原型模式配合原型管理器使用,使得客户端在不知道具体类的情况下,通过接口管理器得到新的实例,并且包含部分预设定配置。原创 2024-01-01 14:42:04 · 650 阅读 · 0 评论 -
[设计模式 Go实现] 创建型~工厂方法模式
工厂方法模式使用子类的方式延迟生成对象到子类中实现。Go中不存在继承 所以使用匿名组合来实现。原创 2023-12-31 14:03:32 · 796 阅读 · 5 评论