设计模式一般是指GOF那本书引出来的名词,其应该是代码模式,而单凭模式的概念是很大的,我认为模式是一种认知总结,最大的好处就是方便交流和复用,它提供了一个组织化的框架,我所知道关于模式的东西就有GOF,架构模式,实时编程模式,还有面向模式三大卷这些书,DDD又何尝不是一种模式呢?如果一种技巧被惯用而且优雅,被大部分人接受,确实能够解决问题,这就可以认为是模式,OSIV被惯用,但是它的问题是那么的明显,所以应该是反模式。
现在,我还是只来理清设计模式的脉络,也就是代码模式,这些编写代码的模式可以增强我们和同行的交流,同时提供了程序应对变化的能力,这样我们可以“偷懒”,因为老板给的新需求,我们发现很快就改完了,然后回家陪老婆,或者去旅游。
先上大图
GOF的模式总结可以从纵向上分为两大类:类模式和对象模式,类模式在具体化时需要使用继承( extends ),对象模式在实现时使用接口,对象模式比类模式要多些,纵向上可以分为创建型,结构性和行为型,如下图
我来从纵向开始阐述这个脉络:
一、创建型
面向对象编程,核心是对象,可惜我们现在大部分程序在面向类编程,对象哪里来?因为有了对象我们才可以说面向对象,对象需要创建,new 这是一个语言上内置的创建方式,Java还有反射,在Gof模式里,有几个是用来创建对象的,所以也是最好理解的了。
(1) Prototype,直接从一个对象克隆出一个
(2) Singleton, 表示一个类只能实例化一个对象,在多线程情况下为了只得到一个对象,Java里面有个出名的双检查锁惯用法
(3) Builder 将创建复杂对象的代码与对象的表示分开,抽象了产品和产品生产过程
(4) Abstract Factory 通常用于创建产品族的时候使用,抽象了工厂和产品
(5) Factory Method 这是一个类模式,抽象了一个方法和产品,让子类来实现
二、结构型
计算机处理的对象都是离散的,离散对象我们一般要把它们安排进一个结构,线性也好,树也好,当然这是数据结构的内容,但是我们GOF模式把对象也安排了一些结构,请看下面分解
(1) Composite 将对象组织成一个树形结构,用来表示部分和整体,递归
(2) Bridge 桥,两端中间画线,从两个维度,当然可以扩展为多个维度,那就是立交桥,这个模式将抽象和实现分离,然后动态组合
(3) Facade 抽象子系统的复杂交互,解耦客户端使用API,看过人工智能的知道,人脸背后可能是一堆数据线或者真实的人类肌肉
(4) Proxy 代理,典型的一种结构,一个对象控制另一个,客户端只能使用代理对象,这个模式非常棒,比如我们爬墙通过某个代理达到某个网站
(5) Decorator 装饰,和代理有点相似,但是这个模式是为了动态的给类添加职责,装饰完了之后的接口和原来一样的
(6) Adaptor 适配,不能改变那就适应吧,分为类适配和对象适配,类适配通过继承,对象适配通过包容,所以类适配是典型的类模式
(7) Flyweight 用得不多,为了节省内存的一种模式,如果存在某对象则直接用,不用再创建一个
三、行为型
面向对象编程,我们关注的核心就是职责分配和角色扮演,对象交互,所以行为型编程就着重对象交互,对象在交互的同时体现责任和角色,这才对象编程生机勃勃的地方。
(1) Command 命令模式,将请求或者工作单元封装到命令中,然后丢给执行者,因为命令封转状态,所可以记录日志,排队或者撤销
(2) Chain of Responsibility 责任链,将对象责任排成一行,一个一个的进行传递
(3) Mediator 中介,和我们去租房和卖方差不多,封装交互,解耦我和房东
(4) Observer 定义对象的一对多状态依赖,一个对象状态变更,自动通知对这个状态变更感兴趣的其他对象
(5) State 对象在内部状态改变之后行为也改变,强调内部状态,外界不可知
(6) Strategy 策略,抽象一种算法,解耦算法实现,非常常用的模式
(7) Visitor 访问 表示对某种对象结构的访问,在对象结构不变的情况下可以增加新的访问,只要被访问的结构接受即可,但是有个前提就是对象结构必须稳定
(8) Memento 备忘 在对象不可知的前台下捕捉对象状态,以便恢复
(9) Iterator 迭代器,不暴露实现细节,就可以顺序访问集合对象
(10) Template Method 一个需要继承的类模式,定义一个操作算法的骨架,一些步骤需要子类来实现
(11) Interpreter 定义文法,定义解释器,解释器通过文法来解释句子,编译过程用这个模式
最后,还是引用互联网上很多人共享一句话总为结尾:学张无忌练太极剑,忘记,然后活用。
- 大小: 146.9 KB
- 大小: 6.8 KB
分享到:
相关推荐
模式 在一定环境中解决某一问题的方案,包括三个基本元素--问题,解决方案和环境。...设计模式是软件工程的基石脉络,如同大厦的结构一样。 学习设计模式的意义 提高职业素养,关注学员在行业内的长期发展
虽然文件内容中存在OCR扫描的识别错误,但不影响我们从整体上把握设计模式的脉络和学习方法。需要注意的是,设计模式的学习需要结合实际代码实践,从而真正掌握模式的精髓并能在开发中正确运用。
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。 使用设计模式的目的:为了代码可重用性、让代码更容易被他人...设计模式是软件工程的基石脉络,如同大厦的结构一样。
在软件开发过程中,设计模式和体系结构是两个至关重要的概念,它们构成了软件设计的基础和骨架。这份名为"软件设计模式与体系结构(期末复习2)简答题背诵.rar"的压缩包,显然针对的是学生们的期末复习,特别是那些...
设计模式是软件工程的基石脉络,如同大厦 的结构一样。在程序设计中 引入设计模式可以提高代码的可读性和程序运行时的可靠性,使程序设计得到规范和统一。 设计模式代表了最佳的实践,通常被有经验的面向对象的软件...
模式 在一定环境中解决某一问题的方案,包括三个基本元素--问题,解决方案和环境。... 设计模式是软件工程的基石脉络,如同大厦的结构一样。 学习设计模式的意义 提高职业素养,关注学员在行业内的长期发展。
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。 使用设计模式的目的:为了代码可重用性、让代码更容易被他人...设计模式是软件工程的基石脉络,如同大厦的结构一样。
从上述内容来看,研究型设计是一种前瞻性的设计模式,它能够帮助设计师在设计过程中更准确地把握用户需求,预测和解决潜在的设计问题,并且在不断的设计实践中验证和完善研究成果。随着对环境行为研究的深入,研究型...
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、...设计模式是软件工程的基石脉络,如同大厦的结构一样。
使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。 使用设计模式的目的:为了代码可重用性、让代码更容易被他人...设计模式是软件工程的基石脉络,如同大厦的结构一样。
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、...设计模式是软件工程的基石脉络,如同大厦的结构一样。
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 使用设计模式是为了可重用代码、让代码更容易被他人理解、...设计模式是软件工程的基石脉络,如同大厦的结构一样。
本文回顾了航海地图集发展的历史进程,梳理了发展脉络,总结了融媒体时代航海地图集的新特征,提出了综合航海地图集的基于层次模型的总体设计思路、基于"三维度立方体"的图幅内容设计模式和融媒体海图服务体系。...
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解...设计模式是软件工程的基石脉络,如同大厦的结构一样。
高职毕业设计脉络分析主要涉及的是对高等职业院校毕业设计(论文)的综合研究,旨在通过文献计量分析方法揭示该领域的研究热点、发展趋势和脉络。这篇文档可能是一篇研究论文,作者通过Citespace软件对2000年至2018...
设计模式是软件工程的基石脉络,如同大厦的结构一样。 为什么要提倡“Design Pattern(设计模式)”? 根本原因是为了代码复用,增加可维护性。因此这次我们来学习下设计模式,最后会通过C#语言来实现这些设计模式作为...
设计模式是软件工程的基石脉络,如同大厦的结构一样。 为什么要提倡“Design Pattern(设计模式)”? 根本原因是为了代码复用,增加可维护性。因此这次我们来学习下设计模式,最后会通过C#语言来实现这些设计模式作为...
曾有人调侃,设计模式是工程师用于跟别人显摆的,显得高大上;...设计模式是软件工程的基石脉络,如同大厦的结构一样。”今天我们来聊聊CSS的设计模式。设计模式,这个词汇我们常见,几乎所有的编程语言都会有几