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) 以及注解的使用,成功解决了在程序中层与层之间出现的耦合的问题,但是在很多地方仍然存在非该层应该实现的 ...
随机推荐
- SpringJdbc持久层封装,Spring jdbcTemplate封装,springJdbc泛型Dao,Spring baseDao封装
SpringJdbc持久层封装,Spring jdbcTemplate封装,springJdbc泛型Dao,Spring baseDao封装 >>>>>>>& ...
- [图形学] Chp18 OpenGL表面纹理函数
以2D表面为例展示纹理贴图,用opengl设置一个2D纹理,颜色存储在32*32*3的数组中,对应的纹理坐标为0<=s, t<=1.0. 画出几个正方形表面,分别以GL_CLAMP(纹理坐 ...
- javascript运动框架(二)
紧接着上面写的... 给div加一个边框,border:1px solid black window.onload = function(){ var div = document.getE ...
- unslider插件的使用
深入理解unslider.js源码 最近用到了一个挺好用的幻灯片插件,叫做unslider.js,就想看看怎么实现幻灯片功能,就看看源码,顺便自己也学习学习.看完之后收获很多,这里和大家分享一下. u ...
- acm->stl
容器 queue 队列 定义 queue的定义需要两个参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque类型 基本方法 push(x) 入队,将x接到队列的末端 ...
- PHP机器学习库php-ml的简单测试和使用
php-ml是一个使用PHP编写的机器学习库.虽然我们知道,python或者是C++提供了更多机器学习的库,但实际上,他们大多都略显复杂,配置起来让很多新手感到绝望.php-ml这个机器学习库虽然没有 ...
- 一颗简单的hibernate栗子
Hibernate是一个开源的ORM框架,顾名思义,它的核心思想即ORM(Object Relational Mapping,对象关系映射),可以通过对象来操作数据库中的信息,据说开发者一开始是不太熟 ...
- 计算BMI
用一个小程序计算BMI 代码如下: package Day06; public class BMI { private String name; private int age; private do ...
- fzu 2257 saya的小熊饼干
https://vjudge.net/problem/FZU-2257 题意:略 思路: 看题解补的题.正难则反的思想求概率. 首先,由于各维数之间是独立的.所以以x为例.首先,计算可以取到(i,j) ...
- Python进阶——笔记1
1.*args 的用法 *args 和 **kwargs 主要用于函数定义. 你可以将不定数量的参数传递给一个函数. 这里的不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场 ...