C/C++ 知识点---设计模式
在软件工程中,设计模式用来描述在各种不同情况下,要怎么解决问题的一种方案。面向对象设计模式通常以类或对象来描述其中的关系和相互作用,是软件“设计”层次上的问题。使用设计模式可提高代码的重用性和可靠性,使代码更容易被他人理解,使代码编制真正工程化。
一般将设计模式分为三种类型,共23种:
1.创建型模式
抽象工厂模式(Abstract Factory):为一个产品族提供一系列相关或相互依赖对象的接口,当需要该产品族某一系列时,可以从抽象工程中选出相应的系列创建一个具体的工程类。
工厂模式(Factory Method):定义一个接口用于创建对象,让子类决定将哪一个类实例化,即把一个类得实例化延迟到其子类。
单例模式(Singleton):确保一个类仅有一个实例,并提供对该实例的全局访问点。
原型模式(Prototype):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
建造者模式(Builder):将一个复杂对象的“构建”与“表示”分离,使得同样的构建过程可以创建不同的表示。
2.结构型模式
代理模式(Proxy):为其他对象提供一个代理,以控制对该对象的访问。
适配器模式(Adapter):将某个类的接口转换成客户端需要的另一种接口表示,使得原来接口不匹配的那些类达到兼容效果。
桥接模式(Bridge):将抽象部分和它的实现部分分离,以便两者可以独立地变化。
组合模式(Composite):将对象组合成树形结构以表示“部分-整体”的层次结构,这样使得用户可以统一对待单个对象和复合对象。
装饰模式(Decorator):是除类继承外的另一种扩展功能的方法,即动态地给某个对象添加一些额外的功能。
外观模式(Facade):为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
享元模式(Flyweight):通过共享技术以有效地支持大量细粒度对象。
3.行为型模式
观察者模式(Observer):在对象间定义一种一对多的依赖关系,以便当一个对象改变状态时,其他相关的对象会被通知并自动刷新。
策略模式(Strategy):定义一系列算法,将它们各自封装,并使它们之间存在交互性。Strategy模式使得算法在用户使用时能独立地改变。
模版方法模式(Template Method):构建一个顶级逻辑框架,而将逻辑的细节延迟到具体子类中去实现。即准备一个抽象类,将部分逻辑以具体方法及具体构建子类的形式实现,然后声明一些抽象方法迫使子类实现剩余的逻辑,这样不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。
迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露改对象的内部表示。
访问者模式(Visitor):封装一些施加于某种数据结构元素之上的操作。这样在不改变各元素类的前提下,可对这些元素实现新的操作。Visitor模式适用于数据结构相对未定的系统,它把数据结构和作用于数据结构上的操作之间的耦合解脱开,使得操作集合可以相对自由地演化。
命令模式(Command):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。
状态模式(State):允许一个对象在其内部状态改变时,其行为也随之改变。State模式需要对每个系统可能获取的状态创立一个状态类的子类,当系统的状态变化时,系统便改变所选的子类。
解释器模式(Interpreter):给定一种语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。
中介者模式(Mediator):用一个中介对象来封装一系列的对象交互,使得这些对象不需显示地相互引用,从而使其耦合松散。当某些对象之间的作用发生改变时,不会立即影响其他一些对象之间的作用,保证这些作用可以彼此独立地变化。
职责链模式(Chain of Responsibility):为解除请求的发送者和接受者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。
备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并外部化保存该状态,从而以后可以将该对象恢复到保存时的状态。
C/C++ 知识点---设计模式的更多相关文章
- ios 学习路线总结
学习方法 面对有难度的功能,不要忙着拒绝,而是挑战一下,学习更多知识. 尽量独立解决问题,而不是在遇到问题的第一想法是找人. 多学习别人开源的第三方库,能够开源的库一定有值得学习的地方,多去看别的大神 ...
- HashMap(三)之源码分析
通过分析HashMap来学习源码,那么通过此过程我们要带着这几个问题去一起探索 为什么要学习源码 怎么去学习 0.1 为什么要学习源码 这个问题,直接给出结论,学习源码肯定是有好处的,比如: 学习优秀 ...
- Javascript知识点记录(三)设计模式
Javascript设计模式记录,这个方面确实是没写过,工作中也没有用到js设计模式的地方. prototype与面向对象取舍 使用prototype原型继承和使用面向对象,都可以实现闭包的效果.那么 ...
- 剑指Offer——知识点储备-设计模式
剑指Offer--知识点储备-设计模式 设计模式 设计模式的六大原则 (1)单一职责原则(有且仅有一个原因引起类的变化): (2)里氏替换(任何父类出现的地方子类都可以替换): (3)依赖倒置(依赖抽 ...
- Java面试知识点之设计模式(一)
前言:关于设计模式,在框架中用的比较多.在平常接触最为频繁的估计是单例模式了,因此笔者在此对设计模式相关知识点进行总结. 1.设计模式的种类 总体来说,设计模式分为3大类总共23种: 1)创建型模式, ...
- 设计模式常见面试知识点总结(Java版)
设计模式 这篇总结主要是基于我设计模式系列的文章而形成的的.主要是把重要的知识点用自己的话说了一遍,可能会有一些错误,还望见谅和指点.谢谢 更多详细内容可以到我的cdsn博客上查看: https:// ...
- 《JavaScript设计模式与开发实践》知识点笔记
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "PingFang SC" } p.p2 { margin: 0.0px ...
- js常见知识点3.面向对象之继承、设计模式
一.面向对象的三大特征 建议回复: 封装:屏蔽内部细节.调用外部接口实现对应功能(函数调用) 继承:子类继承父类中的属性和方法 多态(js中不存在多态的概念) 二.继承 建议回复: 继承:子类继承父类 ...
- Spring知识点总结(四)之SpringAOP基础 - 代理设计模式
1. 分析程序中存在的问题(高内聚,低耦合) 通过springIOC DI) 以及注解的使用,成功解决了在程序中层与层之间出现的耦合的问题,但是在很多地方仍然存在非该层应该实现的 ...
随机推荐
- View学习(三)- View的布局(layout)过程
前段开始学习View的工作原理,前两篇博客的草稿都已经写好了,本想一鼓作气写完所有的相关文章,然后经历了一段连续加班,结果今天准备继续写文章时,把之前写好的东西都忘记了,又重新梳理了一遍,所以说那怕就 ...
- 【Stack Overflow -- 原创加工、原创整理、生产实战】-- 深度复制
一.说明 1.本程序的核心代码不是我原创的,是我在Stack Overflow上搜集后加工出来的,原作者已忘记了~ 2.这段程序是我在上海携程(2014年左右)上班时整理并在生产环境应用的,先后经历了 ...
- [基础架构]PeopleSoft Process Scheduler 重要文件说明
我们都知道PeopleSoft是由几个不同的服务组成的,他们在PeopleSoft体系结构中扮演着自己的角色.这些服务具有不同的文件结构并包含重要的可执行文件和配置文件. 以下是Peoplesoft体 ...
- 详细解析 JavaScript 获取元素的坐标
引言 最近突然看到了有关图片懒加载的问题,大致意思就是初始状态下页面只加载浏览器可视区域的图片,剩余图片在当浏览器可视区域滚动到其位置时才开始加载.貌似现在许多大型网站都有实现懒加载,所以我便就此问题 ...
- Windows平台下搭建MySQL数据库
1.下载安装MySQL数据库: (1)->我的标签->软件下载->计算机相关专业所用软件---百度云链接下载->mysql-installer-community-5.7.18 ...
- 在Linux上创建Postgresql数据库
由于前一次用默认的配置创建pgsql数据库倒置root的占用率达到97%. 重新创建一次数据库,很多坑又忘了. 创建一个放Data的文件夹,/majestic12/pgsql/data PGDATA ...
- HashMap源码浅析(jdk1.8)
HashMap是以key-value键值对的形式进行存储数据的,数据结构是以数组+链表或红黑树实现. 数据结构图如下: 一.关键属性 HashMap初始化和方法使用的属性. /** * 默认初始容量1 ...
- MyBatis源码解析【6】SqlSession运行
前言 这个分类比较连续,如果这里看不懂,或者第一次看,请回顾之前的博客 http://www.cnblogs.com/linkstar/category/1027239.html 经过之前的学习我们知 ...
- 浅谈Notepad++选中行操作+快捷键+使用技巧【超详解】
Notepad++选中行操作 快捷键 使用技巧 用Notepad++写代码,要是有一些重复的代码想copy一下,还真不容易,又得动用鼠标,巨烦人.... 有木有简单的方法呢,确实还是有的不过也不算太好 ...
- Spring事件解析
首先介绍Spring事件相关类的关系: 其中EventListener与EventObject均是Java SE的范畴,源码如下: package java.util; public interfac ...