设计模式分三种类型,共23种:

  • 行为型:规定了对象之间交互的方式;行为模式定义系统内对象间的通信,以及复杂程序中的流程控制。

  • 结构型:规定了如何组织类和对象;结构型模式可以将一组对象组合成更大的结构,例如复杂的用户界面或报表数据。
  • 创建型:规定了创建对象的方式;创建型模式是创建对象而不是直接实例化对象,这会使程序在判断给定情况下创建哪一个对象时更为灵活。

所有设计模式的实现都遵循的一条原则,即“找出程序中变化的地方,并将变化封装起来”。

创建型模式,有

静态工厂模式(Factory Pattern)静态方法返回实例

抽象工厂模式(Abstract Factory Pattern)接口方式返回实例

建造者模式(Builder Pattern)每次返回多个实例

单例模式(Singleton Pattern)类只有一个实例

原型模式(Prototype Pattern)实现ICloneable接口

结构型模式,

适配器模式(Adapter Pattern)不想实现每个接口

桥接模式(Bridge Pattern)给桥设置某个实例,用桥调用实例方法

过滤器模式(Filter、Criteria Pattern)按条件过滤集合

组合模式(Composite Pattern)树结构, 包含父节点和子节点

装饰器模式(Decorator Pattern)给方法加点装饰

外观模式(Facade Pattern)computer与CPU, memory关系

享元模式(Flyweight Pattern)类似threadpool管理线程?

代理模式(Proxy Pattern)无法修改某个方法, 继承该类扩展该方法

行为型模式,

责任链模式(Chain of Responsibility Pattern)接收者包含另一个接收者的引用,如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者

命令模式(Command Pattern)数据驱动, 以命令的形式包裹在对象中,并传给调用对象

解释器模式(Interpreter Pattern)实现了一个表达式接口,该接口解释一个特定的上下文 这种模式被用在 SQL 解析、符号处理引擎等

迭代器模式(Iterator Pattern)实现集合类, iterator

中介者模式(Mediator Pattern)降低多个对象和类之间的通信复杂性,这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护

备忘录模式(Memento Pattern)备份一个数据, 后面可以还原回来

观察者模式(Observer Pattern)委托方法调用

状态模式(State Pattern)根据状态调用不同的方法

空对象模式(Null Object Pattern)在空状态的默认行为

策略模式(Strategy Pattern)add, substract类实现calculator接口, 用一个辅助类实现计算

模板模式(Template Pattern)抽象类用1个seal方法调用其它虚方法, 虚方法在子类实现

访问者模式(Visitor Pattern)通过accept(visitor)方法接受visitor调用自己的方法

OO基础: 抽象、继承、封装、多态。

OO原则:

  • 封装变化;

  • 面向接口编程;

  • 多用组合、少用继承;

  • 为松耦合设计而努力;

  • 开闭原则:对扩展开放、对修改关闭;

  • 要依赖抽象,不要依赖具体类;

  • 只和你的密友谈话。

  • 别调用我们,我们会调用你。

  • 一个类应该只有一个引起变化的原因,即一个类应该只有单一责任。

其他的解释,大致意思是相同的。

观察者模式:定义对象之间一对多依赖,这样一来,当一个对象状态发生改变,他所有的依赖者都会得到通知并自动更新。

策略模式:定义算法组,分别封装,让它们能够互相替换,此模式让算法的变化独立于使用算法的客户。

装饰者模式:动态的将责任加在对象上。

工厂方法模式:定义创建对象的接口,由子类决定具体实例化的类是哪一个。

抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

注:工厂方法和抽象工厂的区别:工厂方法使用的是继承,抽象工厂使用的是组合。抽象工厂中每一个创建接口都可使用工厂方法模式。

单例模式:确保一个类只有一个实例,并提供一个全局访问点。

命令模式:将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其它对象。命令模式也支持可撤销的操作。

适配器模式:将一个类的接口,转换为客户期望的另一个类的接口。让原本接口不兼容的类可以合作无间。

注:对象适配器使用的是组合,类适配器使用的是继承。

外观模式:提供一个统一的访问接口,用来访问子系统的一群接口。

模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法能够使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部表示。

组合模式:允许你将对象组合成树形结构来表现“整体/部分”层次结构。

状态模式:允许对象在内部状态改变的时改变他的行为,对象看起来好像修改了它的类。

C# 设计模式速记的更多相关文章

  1. 三类,23种设计模式,速记理解法!PHP

    一,创建型设计模式 1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了.麦当劳 ...

  2. 三类(创结行),23种设计模式,速记理解法!PHP

    一,创建型设计模式 1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了.麦当劳 ...

  3. MVVM设计模式和WPF中的实现(四)事件绑定

    MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  4. java EE设计模式简介

    1.何为设计模式 设计模式提供了对常见应用设计问题的解决方案.在面向对象的编程中,设计模式通常在解决与对象创建和交互相关的问题,而非整体软件架构所面对的大规模问题,它们以样板代码的形式提供了通用的解决 ...

  5. 计算机程序的思维逻辑 (54) - 剖析Collections - 设计模式

    上节我们提到,类Collections中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了第一类,本节我们介绍第二类. 第二类方法大概可以分为两组: 接受其他 ...

  6. 《JavaScript设计模式 张》整理

    最近在研读另外一本关于设计模式的书<JavaScript设计模式>,这本书中描述了更多的设计模式. 一.创建型设计模式 包括简单工厂.工厂方法.抽象工厂.建造者.原型和单例模式. 1)简单 ...

  7. 《JavaScript设计模式与开发实践》整理

    最近在研读一本书<JavaScript设计模式与开发实践>,进阶用的. 一.高阶函数 高阶函数是指至少满足下列条件之一的函数. 1. 函数可以作为参数被传递. 2. 函数可以作为返回值输出 ...

  8. 设计模式之行为类模式大PK

                                        行为类模式大PK 行为类模式包括责任链模式.命令模式.解释器模式.迭代器模式.中介者模式.备忘录模式.观察者模式.状态模式.策略 ...

  9. .NET设计模式访问者模式

    一.访问者模式的定义: 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. 二.访问者模式的结构和角色: 1.Visitor 抽象访问者角色,为该 ...

随机推荐

  1. C# .NET Winform等程序一运行就闪退 不同环境 换到其他电脑,例如XP之类的解决方法。

    我现在写标题就跟写tag一样,方便大家索引. 有时候经常会把.NET写的程序拿到其他客户机,发现直接闪退,啥也不报错..那就很蛋疼,又不可能去装IDE来检测是吧,网上还有很多说啥看系统日志的,什么图标 ...

  2. GitHub上优秀的Go开源项目

    近一年来,学习和研究Go语言,断断续续的收集了一些比较优秀的开源项目,这些项目都非常不错,可以供我们学习和研究Go用,从中可以学到很多关于Go的使用.技巧以及相关工具和方法.我把他们整理发出来,大家有 ...

  3. 随机森林学习-sklearn

    随机森林的Python实现 (RandomForestClassifier) # -*- coding: utf- -*- """ RandomForestClassif ...

  4. Vue.js+Koa2移动电商实战 笔记

    地址:http://jspang.com/ https://github.com/shenghy/SmileVue 1.vant  https://www.youzanyun.com/zanui/va ...

  5. bzoj2243树链剖分+区间合并

    树链上区间合并的问题比区间修改要复杂,因为每一条重链在线段树上分布一般都是不连续的,所以在进行链上操作时要手动将其合并起来,维护两个端点值 处理时的方向问题:lca->u是一个方向,lca-&g ...

  6. MySQL重复数据处理

    最近工作很忙,很久没写博客,嘻嘻!今天写一遍关于MySQL重复数据处理的博客!前不久有个开发问我,能不能把重复的数据去除,留下唯一的数据.然后我问他为什么有这么重复的数据呢,他说写了程序去爬数据,爬到 ...

  7. 51nod1185 威佐夫游戏 V2 (模拟乘法)

    1185 威佐夫游戏 V2  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 有2堆石子.A B两个人轮流拿,A先拿.每次可以从一堆中取任意个或从2堆中取 ...

  8. 《剑指offer》-找到字符串中第一个只出现一个的字符

    题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出 ...

  9. 【动态规划】Part1

    1. 硬币找零 题目描述:假设有几种硬币,如1.3.5,并且数量无限.请找出能够组成某个数目的找零所使用最少的硬币数. 分析:   dp [0] = 0           dp [1] = 1 + ...

  10. Spring AOP 入门实例详解

    目录 AOP概念 AOP核心概念 Spring对AOP的支持 基于Spring的AOP简单实现 基于Spring的AOP使用其他细节 AOP概念 AOP(Aspect Oriented Program ...