.net学习笔记--设计模式
设计模式都有哪些?
按照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学习笔记--设计模式的更多相关文章
- [学习笔记]设计模式之Abstract Factory
写在前面 为方便读者,本文已添加至索引: 设计模式 学习笔记索引 在上篇笔记Builder设计模式中,时の魔导士祭出了自己的WorldCreator.尽管它因此能创造出一个有山有树有房子的世界,但是白 ...
- [学习笔记]设计模式之Builder
写在前面 为方便读者,本文已添加至索引: 设计模式 学习笔记索引 作为一个新入职的魔导士呢,哦不,是程序员,我以为并没有太多机会去设计项目的软件架构.但是,工作一段时间之后,自己渐渐意识到,哪怕是自己 ...
- [学习笔记]设计模式之Adapter
写在前面 为方便读者,本文已添加至索引: 设计模式 学习笔记索引 Adapter(适配器)模式主要解决接口不匹配的问题.为此,让我们要回到最初Builder模式创建平行世界时,白雪公主和小霍比特人的谜 ...
- [学习笔记]设计模式之Bridge
写在前面 为方便读者,本文已添加至索引: 设计模式 学习笔记索引 “魔镜啊魔镜,谁是这个世界上最美丽的人?”月光中,一个低沉的声音回荡在女王的卧室.“是美丽的白雪公主,她正和小霍比特人们幸福快乐地生活 ...
- [学习笔记]设计模式之Prototype
写在前面 为方便读者,本文已添加至索引: 设计模式 学习笔记索引 在笔记Builder模式中,我们曾见到了最初用于创建平行世界的函数createWorld,并且它是Mage类的成员函数(毕竟是专属于魔 ...
- [学习笔记]设计模式之Command
为方便读者,本文已添加至索引: 设计模式 学习笔记索引 写在前面 在上篇Chain of Responsibility(职责链)模式笔记中,我们学习了一种行为型设计模式.今天,我们继续这一主题,来学习 ...
- [学习笔记]设计模式之Chain of Responsibility
为方便读者,本文已添加至索引: 设计模式 学习笔记索引 写在前面 最近时间比较紧,所以发文的速度相对较慢了.但是看到园子里有很多朋友对设计模式感兴趣,我感觉很高兴,能够和大家一起学习这些知识. 之前的 ...
- [学习笔记]设计模式之Composite
为方便读者,本文已添加至索引: 设计模式 学习笔记索引 写在前面 在Composite(组合)模式中,用户可以使用多个简单的组件以形成较大的组件,而这些组件还可能进一步组合成更大的.它重要的特性是能够 ...
- [学习笔记]设计模式之Proxy
为方便读者,本文已添加至索引: 设计模式 学习笔记索引 写在前面 “魔镜啊魔镜,谁是这个世界上最美丽的人?” 每到晚上,女王都会问魔镜相同的问题(见Decorator模式).这是她还曾身为女巫时留下的 ...
- [学习笔记]设计模式之Flyweight
为方便读者,本文已添加至索引: 设计模式 学习笔记索引 写在前面 Flyweight(享元)模式运用共享技术,可以有效地支持大量细粒度的对象.今天我们会去参观小霍比特人们的酿酒工坊……等等,不是享元模 ...
随机推荐
- 8--oop
oop-Python面向对象 Python的面向对象 面向对象编程 基础 共有私有 继承 组合,Mixin 魔法函数 魔法函数概述 构造类魔法函数 运算类魔法函数 1.面向对象概述(ObjectOri ...
- RSA等非对称加密为什么要用公钥加密,而用私钥解密?
1.RSA是不对称加密算法,它的公钥可能会被多人持有(公钥公钥,公开的密钥),而私钥只有一人拥有,例如支付宝开放平台,私钥只有支付宝公司持有,而公钥则是所有接入它API的公司都能得到.对于公钥加密的信 ...
- Linux系统故障分析与排查--日志分析
处理Linux系统出现的各种故障时,故障的症状是最先发现的,而导致这以故障的原因才是最终排除故障的关键.熟悉Linux系统的日志管理,了解常见故障的分析与解决办法,将有助于管理员快速定位故障点,“对症 ...
- 在kali上安装谷歌浏览器
在kali上安装谷歌浏览器的时候,遇到了很多问题,经过不懈努力,终于解决,现在把方法总结一下,希望对遇到同样问题的人能有一定帮助.这是给最白的小白参考的,大牛勿喷哈. 首先去这个网站www.googl ...
- js跨域及解决办法
1.什么是跨域 我们经常会在页面上使用ajax请求访问其他服务器的数据,此时,客户端会出现跨域问题. 跨域问题是由于javascript语言安全限制中的同源策略造成的. 简单来说,同源策略是指一段脚本 ...
- ZendFramework-2.4 源代码 - 开始
ZendFramework 是一种PHP框架. 写在前面 最早遇到ZendFramework是在阅读一款叫Magento电子商务系统源代码时看到,后来因为工作,把注意力侧重在其他方面,就搁置了继续了解 ...
- java中常用的swing组件 (2013-10-27-163 写的日志迁移
五种布局: 流式布局(FlowLayout)边界布局(borderLayout)网格布局(GridLayout) 盒子布局(BoxLaYout) 空布局(null) 常用的几种 卡片布局(C ...
- 对数据仓库Hive的一些认识
首先我们得明白什么是数据仓库? 数据仓库,英文名称为Data warehouse,可简写为DW或DWH.数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持(Decision Supp ...
- A1025 PAT Ranking (25)(25 分)
A1025 PAT Ranking (25)(25 分) Programming Ability Test (PAT) is organized by the College of Computer ...
- HTML练习题
1.查询一下对div和span标签的理解 div标签:是用来为HTML文档内大块的内容提供结构和背景的元素.DIV的起始标签和结束标签之间的所有内容都是用来构成这个块的,中文我们把它称作“层”. sp ...