在软件工程中,设计模式用来描述在各种不同情况下,要怎么解决问题的一种方案。面向对象设计模式通常以类或对象来描述其中的关系和相互作用,是软件“设计”层次上的问题。使用设计模式可提高代码的重用性和可靠性,使代码更容易被他人理解,使代码编制真正工程化。

一般将设计模式分为三种类型,共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++ 知识点---设计模式的更多相关文章

  1. ios 学习路线总结

    学习方法 面对有难度的功能,不要忙着拒绝,而是挑战一下,学习更多知识. 尽量独立解决问题,而不是在遇到问题的第一想法是找人. 多学习别人开源的第三方库,能够开源的库一定有值得学习的地方,多去看别的大神 ...

  2. HashMap(三)之源码分析

    通过分析HashMap来学习源码,那么通过此过程我们要带着这几个问题去一起探索 为什么要学习源码 怎么去学习 0.1 为什么要学习源码 这个问题,直接给出结论,学习源码肯定是有好处的,比如: 学习优秀 ...

  3. Javascript知识点记录(三)设计模式

    Javascript设计模式记录,这个方面确实是没写过,工作中也没有用到js设计模式的地方. prototype与面向对象取舍 使用prototype原型继承和使用面向对象,都可以实现闭包的效果.那么 ...

  4. 剑指Offer——知识点储备-设计模式

    剑指Offer--知识点储备-设计模式 设计模式 设计模式的六大原则 (1)单一职责原则(有且仅有一个原因引起类的变化): (2)里氏替换(任何父类出现的地方子类都可以替换): (3)依赖倒置(依赖抽 ...

  5. Java面试知识点之设计模式(一)

    前言:关于设计模式,在框架中用的比较多.在平常接触最为频繁的估计是单例模式了,因此笔者在此对设计模式相关知识点进行总结. 1.设计模式的种类 总体来说,设计模式分为3大类总共23种: 1)创建型模式, ...

  6. 设计模式常见面试知识点总结(Java版)

    设计模式 这篇总结主要是基于我设计模式系列的文章而形成的的.主要是把重要的知识点用自己的话说了一遍,可能会有一些错误,还望见谅和指点.谢谢 更多详细内容可以到我的cdsn博客上查看: https:// ...

  7. 《JavaScript设计模式与开发实践》知识点笔记

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "PingFang SC" } p.p2 { margin: 0.0px ...

  8. js常见知识点3.面向对象之继承、设计模式

    一.面向对象的三大特征 建议回复: 封装:屏蔽内部细节.调用外部接口实现对应功能(函数调用) 继承:子类继承父类中的属性和方法 多态(js中不存在多态的概念) 二.继承 建议回复: 继承:子类继承父类 ...

  9. Spring知识点总结(四)之SpringAOP基础 - 代理设计模式

        1. 分析程序中存在的问题(高内聚,低耦合)        通过springIOC DI) 以及注解的使用,成功解决了在程序中层与层之间出现的耦合的问题,但是在很多地方仍然存在非该层应该实现的 ...

随机推荐

  1. 004.Create a web app with ASP.NET Core MVC using Visual Studio on Windows --【在 windows上用VS创建mvc web app】

    Create a web app with ASP.NET Core MVC using Visual Studio on Windows 在 windows上用VS创建mvc web app 201 ...

  2. 几个SQL语句(备忘)

    1.三涨停 select biao1.代码,biao1.名称 from biao1,biao2,biao3 where (biao1.涨幅+ biao2.涨幅+biao3.涨幅)>0.27 an ...

  3. POJ 3659 Cell Phone Network / HUST 1036 Cell Phone Network(最小支配集,树型动态规划,贪心)-动态规划做法

    POJ 3659 Cell Phone Network / HUST 1036 Cell Phone Network(最小支配集,树型动态规划,贪心) Description Farmer John ...

  4. 微信小程序简述

    最近在公司实习,经理要求做一个微信小程序,晚上闲时来写一下. 微信小程序问世没多久,但毋庸置疑的是在不久的将来,它可以替代掉很多的APP.个人认为它的优势在于占用资源少,可以做到即用即走,对于一些使用 ...

  5. nodejs 全局变量和全局对象

    1.全局对象 所有模块都可以调用 1)global:表示Node所在的全局环境,类似于浏览器中的window对象. 2)process:指向Node内置的process模块,允许开发者与当前进程互动. ...

  6. FZU 2256 迷宫

    https://vjudge.net/problem/FZU-2256 题意:略 思路: 在比赛的时候想到了一次dfs,一次bfs但是样例都过不了...赛后才知道,距离的更新必须同步,不能先把时光机的 ...

  7. Android-重新包装Toast,自定义背景

    Android-重新包装Toast,自定义背景 2016-4-27 Android L 算是包装了一个自己使用的小工具. 使用Toast的目的是弹一个提示框.先看一下Toast.makeText方法. ...

  8. Java网络连接之HttpURLConnection、HttpsURLConnection

    工具类包含两个方法: http请求.https请求 直接看代码: package com.jtools; import java.io.BufferedReader; import java.io.I ...

  9. STS 配置tomcat以后,无法访问

    问题 今天在新环境下安装开发环境STS,使用的的3.9,如下图 安装完成之后配置Tomcat,在STS启动Tocat后,在浏览器输入:http://localhost:8080/ 发现无法访问... ...

  10. date——sql查询

    场景:在数据库中要删除一条记录,但是该记录的唯一性只能通过插入数据库的系统时间来确定,字段为date类型,格式是:2016/10/19 17:17:29. 1 解决 在百度上找到的方法是使用to_ch ...