设计模式都有哪些?

按照GOF提出,23种,按照目的分为:创建型(creational)、结构性(structural)、行为型(behavioral)。

一、创建型:

1、Singleton 单例模式。                                   一个类的唯一实例。

2、Factory Method 工厂模式。                         被实例化的子类。(父类.子类方法())

3、Abstract Factory 抽象工厂模式。                  产生对象家族。(声明返回父类型的方法)

4、Builder 生成器模式。                                   如何创建一个组合对象。

5、Prototype 原型模式。                                   被实例化的类。

二、结构型:

1、Adapter 适配器模式。                                对象的接口  (旧接口/类和新接口/类相结合)

http://www.cnblogs.com/wangjq/archive/2012/07/09/2582485.html

2、Bridge 桥模式。                                        对象的实现。(父类声明一个对象,将子类实现方法传递到父类对象中)

http://www.cnblogs.com/houleixx/archive/2008/02/23/1078877.html

3、Composite 组成模式。                                 一个对象的结构和组成。

4、Decorator 装饰模式。                                  对象的职责,不生产子类。

5、Facade 外观模式。                                      一个子系统的接口。

6、Flyweight 享元模式。                                   对象的存储开销。

7、Proxy 代理模式。                                         如何访问一个对象;该对象的位置。

三、行为型:

1、Chain Of Responsibility 职责链模式。          满足一个请求的对象。

2、Command 命令模式。                                  何时、怎样满足一个请求。

3、Interpreter 解释器模式。                              一个语言的文法及解释。

4、Iterator 迭代器模式。                                    如何遍历、访问一个聚合的各元素。

5、Mediator 中介者模式。                                 对象间怎样交互、和谁交互。

6、Memento 备忘录模式。                                一个对象中哪些似有信息存放在该对象之外,以及在什么时候存储。

7、Observer 观察者模式。                                多个对象依赖于另一个对象,而这些对象又如何保持一致

观察者模式:http://www.cnblogs.com/lane_cn/articles/73240.html                                                                                      http://www.cnblogs.com/MRRAOBX/articles/2543586.html

http://www.cnblogs.com/0515offer/p/4286214.html

8、State 状态模式。                                          对象的状态

9、Strategy 策略模式。                                     算法

10、Template Method 模板模式。                     算法中的某些步骤。

11、Visitor 访问者模式。                                   某些可作用于一个(组)对象上的操作,但不修改这些对象的类。

设计模式理解:http://www.cnblogs.com/XmNotes/p/4342930.html

设计模式总结:http://www.cnblogs.com/zhili/p/DesignPatternSummery.html

观察者模式与发布订阅模式

观察者设计模式总结(以大话设计模式前台为例):

1,声明前台接口,定义前台方法例如:注册,取消,发布消息

2,实现前台接口,并且把 需要通知的对象,添加到前台类里

3,声明一个抽象的通知对象,定义通知对象里的操作方法,也就是得到通知后的进行的操作。

注意,抽象方法的构造函数,是有前台类的声明为参数

4,继承抽象通知对象,并且实现抽象通知对象的方法

5,开始发布:先实例化前台类,然后实例化通知对象类,将前台类作为参数放到前台类中;

前台类订阅事件,前台类发布事件

简单工厂模式(以大话模式加减乘除为例):

1,声明一个父类(存储两个运算数和一个GetResult虚方法)

2,分别写加,减,乘,除四个方法,继承父类,重写GetResult方法

3,写一个工厂类,返回类型为父类型,在里面用swich...case做运算符判断,返回new加(),new 减(),new 乘()

4,开始输出:声明父类,以父类的形式=工厂类.工厂方法("运算符"),以父类形式.运算数1=2,以父类型是.运算数2=3

以父类形式.GetResult()

工厂方法模式(以加减乘除为例):

1,将简单工厂的工厂类进行拆解,换成接口(一个工厂类)

interface CreateOperator

{

父类型  CreateOperator();

}

2,分别写加减乘除四个类: 加工厂(),减工厂(),继承该接口,

类中的方法返回  new 加()实例;new 减()实例;new 乘实例; new 除()实例;

3,开始输出:工厂接口 xxx =new 加工厂();

xxx.加工厂类中方法(return new 加());

工厂方法模式采用接口,简单工厂模式不采用接口,工厂方法模式让子类决定按需求实例化哪个类。

简单工厂--》工厂方法--》抽象工厂

抽象工厂模式(大话设计模式的数据访问为例):

跟工厂方法类似,但是工厂方法只有一个抽象类(接口),多个实例

而抽象工厂模式有多个抽象类(接口)

区别:

工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。   
                     一个抽象工厂类(接口),可以派生出多个具体工厂类。 
                 每个具体工厂类只能创建一个具体产品类的实例。 
抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 
                 一个抽象工厂类(接口),可以派生出多个具体工厂类。 
                 每个具体工厂类可以创建多个具体产品类的实例。 
            区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
                工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

反射+抽象工程实现数据访问

IUser result=(IUser)Assembly.Load("当前程序集").CreateInstance("当前命名空间.要实例化的类名");

工厂类其实就是返回一个new 实例,只不过简单工厂声明了父类,工厂方法/抽象工厂声明了接口

.net学习笔记--设计模式的更多相关文章

  1. [学习笔记]设计模式之Abstract Factory

    写在前面 为方便读者,本文已添加至索引: 设计模式 学习笔记索引 在上篇笔记Builder设计模式中,时の魔导士祭出了自己的WorldCreator.尽管它因此能创造出一个有山有树有房子的世界,但是白 ...

  2. [学习笔记]设计模式之Builder

    写在前面 为方便读者,本文已添加至索引: 设计模式 学习笔记索引 作为一个新入职的魔导士呢,哦不,是程序员,我以为并没有太多机会去设计项目的软件架构.但是,工作一段时间之后,自己渐渐意识到,哪怕是自己 ...

  3. [学习笔记]设计模式之Adapter

    写在前面 为方便读者,本文已添加至索引: 设计模式 学习笔记索引 Adapter(适配器)模式主要解决接口不匹配的问题.为此,让我们要回到最初Builder模式创建平行世界时,白雪公主和小霍比特人的谜 ...

  4. [学习笔记]设计模式之Bridge

    写在前面 为方便读者,本文已添加至索引: 设计模式 学习笔记索引 “魔镜啊魔镜,谁是这个世界上最美丽的人?”月光中,一个低沉的声音回荡在女王的卧室.“是美丽的白雪公主,她正和小霍比特人们幸福快乐地生活 ...

  5. [学习笔记]设计模式之Prototype

    写在前面 为方便读者,本文已添加至索引: 设计模式 学习笔记索引 在笔记Builder模式中,我们曾见到了最初用于创建平行世界的函数createWorld,并且它是Mage类的成员函数(毕竟是专属于魔 ...

  6. [学习笔记]设计模式之Command

    为方便读者,本文已添加至索引: 设计模式 学习笔记索引 写在前面 在上篇Chain of Responsibility(职责链)模式笔记中,我们学习了一种行为型设计模式.今天,我们继续这一主题,来学习 ...

  7. [学习笔记]设计模式之Chain of Responsibility

    为方便读者,本文已添加至索引: 设计模式 学习笔记索引 写在前面 最近时间比较紧,所以发文的速度相对较慢了.但是看到园子里有很多朋友对设计模式感兴趣,我感觉很高兴,能够和大家一起学习这些知识. 之前的 ...

  8. [学习笔记]设计模式之Composite

    为方便读者,本文已添加至索引: 设计模式 学习笔记索引 写在前面 在Composite(组合)模式中,用户可以使用多个简单的组件以形成较大的组件,而这些组件还可能进一步组合成更大的.它重要的特性是能够 ...

  9. [学习笔记]设计模式之Proxy

    为方便读者,本文已添加至索引: 设计模式 学习笔记索引 写在前面 “魔镜啊魔镜,谁是这个世界上最美丽的人?” 每到晚上,女王都会问魔镜相同的问题(见Decorator模式).这是她还曾身为女巫时留下的 ...

  10. [学习笔记]设计模式之Flyweight

    为方便读者,本文已添加至索引: 设计模式 学习笔记索引 写在前面 Flyweight(享元)模式运用共享技术,可以有效地支持大量细粒度的对象.今天我们会去参观小霍比特人们的酿酒工坊……等等,不是享元模 ...

随机推荐

  1. pat乙级1060

    将数组排序后从大到小遍历,设置一个递增的变量t,当v[i] > t的时候,说明有t个数大于t,最后一个满足v[i] > t的t即为所求结果. #include <iostream&g ...

  2. IOS 模仿有storyboard的项目控制器的创建

    ● 先加载storyboard文件(Test是storyboard的文件名) UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@ ...

  3. python_27_多级字典嵌套及操作

    #key-value 字典无下标 所以乱序,key值尽量不要取中文 person_log={ '大二':{ 'Ya Nan':['free','cute','soso'], 'Sha sha':['微 ...

  4. Flutter 入坑(1):flutter 环境搭建,window版本

    下载安装JAVA环境 1. 既然要做原生应用了,而且是基于Android的,那还是需要我们安装一下JAVA的环境的,我比一般得到一个新系统后首先做的就是这一步.    https://www.orac ...

  5. 【算法】Fibonacci(斐波那契数列)相关问题

    一.列出Fibonacci数列的前N个数 using System; using System.Collections.Generic; using System.Linq; using System ...

  6. require.js模块化开发

    模块化开发的原因: 1.引入的js过多然后在加载的过程中容易出现假死的状态,导致页面会发生白屏 2.变量名的问题 在多人协作开发的时候容易出现变量名的冲突 面向对象 3.引入优先级的问题 模块化开发分 ...

  7. MySQL基础 - 1 数据库基础

    一.数据库基础 1.什么是数据库 1.数据库(database)是保存有组织的数据的容器( 通常是一个文件或一组文件 ) 2.数据库是一个以某种有组织的方式存储的数据集合 注意:数据库软件应该称为DB ...

  8. CentOS---zookeeper安装(单机、伪集群、集群)

    一:单机安装: 可以参考下面的伪集群安装方式 不同点: 不需要在data目录下创建 myid 文件 不需要配置集群 配置好后的启动和状态查询命令相同!! 二:伪集群模式 伪集群模式就是在同一主机上启动 ...

  9. JZOJ 3493. 【NOIP2013模拟联考13】三角形

    3493. [NOIP2013模拟联考13]三角形(triangle) (File IO): input:triangle.in output:triangle.out Time Limits: 10 ...

  10. 面试前赶紧看了5道Python Web面试题,Python面试题No17

    目录 本面试题题库,由公号:非本科程序员 整理发布 第1题: Flask中的请求上下文和应用上下文是什么? 第2题:django中间件的使用? 第3题: django开发中数据做过什么优化? 第4题: ...