设计模式(Designpattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
上面是百度当中的解释,来解释一下这句简单的话的含义,几个关键词。
反复使用:这个不用过多解释,设计模式被使用太多了,上个系列spring源码当中就出现了很多模式,记忆中比较深刻的有模板模式,代理模式,单例模式,工厂模式等等。
分类编目:就是说可以找到一些特征去划分这些设计模式,从而进行分类。
代码设计经验:设计经验的总结,也就是说设计模式,是为了指导设计而从经验中总结出来的套路。
还有一种说法是说,设计模式是可以解决特定场景的问题的一系列方法,其实我觉得这个解释更贴切一点。
根据设计模式的参考书 中所提到的,总共有 23 种设计模式。这些模式可以分为三大类:
创建型模式(Creational Patterns)、
结构型模式(Structural Patterns)、
行为型模式(Behavioral Patterns)
创建型模式
这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用新的运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。
- 工厂模式(Factory Pattern)
- 抽象工厂模式(Abstract Factory Pattern)
- 单例模式(Singleton Pattern)
- 建造者模式(Builder Pattern)
- 原型模式(Prototype Pattern)
工厂模式:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
建造者模式:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
结构型模式
这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。
- 适配器模式(Adapter Pattern)
- 桥接模式(Bridge Pattern)
- 过滤器模式(Filter、Criteria Pattern)
- 组合模式(Composite Pattern)
- 装饰器模式(Decorator Pattern)
- 外观模式(Facade Pattern)
- 享元模式(Flyweight Pattern)
- 代理模式(Proxy Pattern)
适配器模式:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
桥接模式:将抽象部分与实现部分分离,使它们都可以独立的变化。
过滤器模式:这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来
组合模式:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
装饰器模式:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。
外观模式:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
享元模式:运用共享技术有效地支持大量细粒度的对象。
代理模式:为其他对象提供一种代理以控制对这个对象的访问。
行为型模式
这些设计模式特别关注对象之间的通信。
- 责任链模式(Chain of Responsibility Pattern)
- 命令模式(Command Pattern)
- 解释器模式(Interpreter Pattern)
- 迭代器模式(Iterator Pattern)
- 中介者模式(Mediator Pattern)
- 备忘录模式(Memento Pattern)
- 观察者模式(Observer Pattern)
- 状态模式(State Pattern)
- 空对象模式(Null Object Pattern)
- 策略模式(Strategy Pattern)
- 模板模式(Template Pattern)
- 访问者模式(Visitor Pattern)
责任链模式:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。
命令模式:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。
解释器模式:给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。
迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。
中介者模式:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
状态模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
空对象模式:在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方。
策略模式:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
模板模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
访问者模式:主要将数据结构与数据操作分离
任何没有实际应用场景的设计模式,都是在耍流氓。学习设计模式,不仅仅是为了领悟其精髓,更为了在实践设计当中去运用,去变通。接下来还需要各个击破
相关推荐
C#设计模式通常涵盖23种经典模式,包括创建型、结构型和行为型三大类。 【开篇】中提到,设计模式并不只是理论上的框架,而是在实际编程中需要灵活应用的工具。就像武术中的少林拳,单纯模仿拳法的招式并不足以成为...
《C语言设计模式》是一份深入探讨如何在C语言中应用设计模式的宝贵资源,它涵盖了23种经典设计模式的实现。设计模式是软件工程中的最佳实践,它们是为了解决常见问题而形成的可复用解决方案。这些模式在面向对象编程...
开篇.pdf 继承、封装、多态.pdf 备忘录模式.pdf 工厂模式.pdf 模板模式.pdf 中介者模式.pdf 策略模式.pdf 观察者模式.pdf 桥接模式.pdf 装饰模式.pdf 抽象工厂模式.pdf 适配器模式.pdf 状态模式.pdf 代理...
目录1.C语言设计模式(开篇) 在软件开发中,设计模式扮演着非常重要的角色。好的设计模式可以帮助开发者编写高质量的代码,提高开发效率,降低维护成本。C语言设计模式是软件开发中的一种重要概念,它指的是在软件...
, 同时,随着网络和技术的不断发展,本书在第1 版的基础上,更新了几乎所有的模式示例和说明,并新增了两章全新的移动应用和社交媒体设计模式,帮助读者在这两个新的领域从更高的起点开始设计。, 有效的界面设计,从...
文档中特别提到了工厂模式,这是一种创建型设计模式,用于创建对象而不暴露创建逻辑给客户端,并且通过使用一个共同的接口来指向新创建的对象。工厂模式能够根据不同的输入,生成不同的类实例。这对于需要高度灵活性...
《界面设计模式(第2版)》开篇即总结了“与人有关”的各类问题,为读者提供了界面设计总体思路上的指引,帮助读者举一反三。 接下来,《界面设计模式(第2版)》收集并分析了很多常用的界面设计模式,帮助读者...
本系列一共有20篇左右,除了介绍23种GOF设计模式中常用的一部分之外(一些设计模式的思想在C#语言中有了更简单的实现,一些设计模式不是很常用)还可能会介绍一些其它有用的设计模式。在这些文章中,我不会过多去说...
这一次重温一下《JavaScript设计模式与开发实践》,开篇为单例模式。 /** * pre 单例模式 * 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点 * 应用:单例模式是一种常用的模式,有一些对象我们...
"1、开篇.avi"很可能是介绍整个系列的开篇,讲解了为什么需要这两种设计模式以及它们在Android开发中的重要性。 学习和熟练运用MVC和MVP设计模式对于提升Android开发能力至关重要,它们能帮助开发者写出更清晰、更...
在《“C语言程序设计”教学中开篇教学方法的研究》这篇文章中,付云侠针对理工科大学中广泛开设的基础编程课程——“C语言程序设计”的教学现状,提出了一系列研究和教学方法。文章主要探讨了如何通过案例教学和任务...
设计模式作为软件设计领域的一种重要工具,其价值在于提供了解决常见问题的有效模板。书中强调,虽然设计模式不是万能的,但它能够帮助开发者更好地理解和解决问题,提升软件的质量。 - **工厂模式**:用于创建对象...
总之,“设计模式之美”专栏旨在填补理论学习与实际应用之间的鸿沟,提供一种更有效的学习路径,帮助程序员不仅掌握编写代码的技能,还能提升代码的优雅性和可维护性,从而在职业生涯中持续成长。通过模拟一对一指导...
如果不能就不能好好理解设计模式,那么让我们学习认识这些图吧,下面我们开始这篇博客------设计模式的前奏----UMLUML(UnitedModelingLanguage),统一建模语言,是一种基于面向对象的可视化建模语言.UML采用了一组形象...
此外,陈皓还将介绍一系列分布式系统设计模式,包括弹力设计、管理设计等,这些设计模式涵盖了故障处理、服务调度、流量控制等多个方面,旨在帮助读者深入理解分布式系统的复杂性和应对策略。 通过这个专栏,陈皓...
文章《基于问题求解的C语言开篇教学研究》针对C语言开篇教学中存在的问题,提出了一种以问题求解能力为核心的教学目标和教学过程设计模式。 首先,文章提出C语言教学的根本目标应是培养学生的问题求解能力。然而,...