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) 以及注解的使用,成功解决了在程序中层与层之间出现的耦合的问题,但是在很多地方仍然存在非该层应该实现的 ...
随机推荐
- ARP欺骗分析
(作者原创,欲转载请说明出处)1.arp介绍 arp:地址解析协议;将IP地址映射为MAC地址.2.为什么要有arp 平时上网我们都知道要有一个IP地址才能上网,那arp用来干嘛的呢?如果 ...
- AJAX跨域的常见方法
由于在工作中需要使用AJAX请求其他域名下的请求,但是会出现拒绝访问的情况,这是因为基于安全的考虑,AJAX只能访问本地的资源,而不能跨域访问.比如说你的网站域名是aaa.com,想要通过AJAX请求 ...
- CentOS7 yum安装zabbix3.2.6
前言: 本人小白,在一个多月前通过面试进入公司,在进入公司的第一天,老板把我叫到他办公室,坐下来慢慢喝茶,吹牛,给我吹他们以前做的软件,经营的产品,还装作一副什么都告诉我的样子,其实这都是套路,我早已 ...
- Selenium的简单安装和使用
Selenium的安装 pip install selenium Selenium模块需要调用浏览器,需要配置selenium的浏览器驱动 Firefox(火狐) 下载对应版本的geckdriver. ...
- js 设置下拉框的默认值
设置下拉框的默认值,直接在option中增加selected就可以了.但是现在要使用JS来设置它的默认值,代码如下: <select name="aaa" id=" ...
- HTTP模拟工具【C#/Winform源码】、Json绑定TreeView控件、使用了MetroModernUI、RestSharp、Dapper.Net、Newtonsoft.Json、SmartThreadPool这几个主要开源框架
HTTP模拟工具 开发语言:C#/Winform开发工具:Visual Studio 2017数据库: SQLite使用框架:界面-MetroModernUI Http请 ...
- 18-EasyNetQ:发生错误的情况
这一篇文章让我们看看在消息系统中可能发生的各种错误的情况下,看下EasyNetQ如何处理它们. 订阅服务挂了 当你写了一个windows 服务,用来订阅一个NewCustomerMessage消息. ...
- 针对Oracle数据库中SCOTT方案的多表查询一个例子
查询出每个员工的姓名.职位.月薪.所属部门名.月薪等级及其领导的姓名.职位.所属部门名.月薪等级.select e.ename 员工姓名,e.job 员工职位,e.sal 员工月薪,d.dname 员 ...
- ServerSocket简单例题
ServerSocket 简单例题: package com.kaige123.net; /* *凯哥 */ import java.io.FileInputStream; import java.i ...
- 解决win10注册错误 错误代码0x8002801c
使用win10的过程中经常碰到各种注册错误,让人抓狂!!! 现在分享一个完美的解决方法(非原创): 最简洁的办法是:1.自行将msinet.ocx(win10系统64位)组件复制到C:\Windows ...