随笔分类 - Design Pattern
摘要:Gof定义 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。动机 在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显式指定,将必不可少地带来请求发送者与接受者的紧耦合。如何使请求的发送者不需要指定具体的接受者?让请求的接受者自己在运行时决定来处理请求,从而使两者解耦。理解 责职链这个名字取的很好,就像这个名字反映射出来的意思一样。在我们的生活中,一个员工如果请假,如果请一个下午的假,那么向经理说一下就可以。如果是请二天的假,那么你就得向主管请假,经理没权放...
阅读全文
摘要:Gof定义将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。理解对命令模式我有一些肤浅的认识,也许是不对的。但我还是写一下。其实在我理解的命令模式很简单的。比如,A想去超市买菜,B想去超市买苹果,C想去超市买鱼。那么这时候要是有一个接收命令的人,那该多好哇。这个人接收A的命令,接收B的命令,接收C的命令,等所有人的命令都接收完后,他就开始去DO。当然如果A发过命令后,突然觉的还是 自己去买好了不买好了,那又有相应的CANCEL命令。CODE class Program { static void Main...
阅读全文
摘要:Gof 定义保证一个类仅有一个实例,并提供一个该实例的全局访问点。理解单例设计模式,我看到好像网上也有叫他作单件设计模式。其实故名思义,就是只能产生一个对象。在我们的生活中单例设计模式是很常见的,例如地球是唯一的。好像我前不久看的一部连续剧爱情公寓里说一颗宝石--沙漠之星,那个也是唯一的。还有你自己本身也是唯一,地球上没有一个和你完全一样的人。最简单的单例设计模式CODEnamespace ConsoleApplication1{ class Program { static void Main(string[] args) { /...
阅读全文
摘要:Gof定义为子系统中的一组接口提供一个一致的界面,Façade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。UML图理解 外观设计模式又叫门面设计模式,如果你在网上看到门面设计模式,其实都是一样的。感觉外观模式很简单,好像也没什么好讲的。在《大话设计模式》里举了这么一个例子,有一个股民在买股票,面对成千上万种类型的股票不知道怎么选择好,这时如果有一个股票的经理人,他有多年丰富的经验,你把钱给他,他帮你买股票,那么事情就简单多了。这里的那个多年丰富经验的股票经理人就是Facade(门面,外观)。我们通过直接跟股票经理人打交道,而具体要做的事情由股票经理人去处理就行。Cod
阅读全文
摘要:Gof定义提供一种方法顺序访问一个聚合对象中的各个元素, 而又不暴露该对象的内部表示。理解我们实际上经常用到迭代器模式,例如FOREACH语句,就是对迭代器模式的实现,泛型像LIST也是对迭代器模式的实现。关于迭代器模式在实际应用中很广泛,但他已经渐渐的融入到我们的编程语言语法中的其中一部份,所以实际上可能不需要再自己要动手写一个迭代器模式了。但是大概去了解一下内部实现原理,我觉的还是很值得的。示例代码View Code /// <summary>/// 集合结构接口/// </summary>public interface Aggregate{ Iterator C
阅读全文
摘要:Gof定义定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通 知并自动更新理解观察者设计模式:当一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。例如你在淘宝上购买了一件商品,当你付完钱后,你的淘宝帐户里会记录等待卖家发货这条信息,你的手机会收到一条短信说你手机银行里扣了钱,你的邮箱也可能会收到一封邮件。UML图银行取钱例子View Code using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace
阅读全文
摘要:Gof定义使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。动机在软件系统中,经常面临着“某些结构复杂的对象”的创建工作,但由于需求的变化,这些对象将成面临着剧烈的变化,但他们拥有比较稳定一致的接口。原型模式(Prototype)的几个要点Prototype模式同样用于隔离类对象的使用者和具体类型(易变类型)之间的耦合关系,同样要求这些易变类型具有稳定的接口。Prototype模式对于“如何创建易变类的实体对象”采用原型克隆的方法来做,他使得我们可以非常灵活的动态创建“拥有某些稳定接口”的新对象–所需工作仅仅是注册一个新类的对象(原型),然后在任何需要的地方不断地Clone。
阅读全文
摘要:定义为其他对象提供一种代理以控制对这个对象的访问。理解代理模式也是经常在我们生活中会发生的和编程中经常会接触到的事情。也许你没意识到这就是代理模式,但我想你应该接触过和使用过了。1、比如你喜欢一个女孩子,你不敢直接表白,于是你找了一个朋友代你去表白,那个代你表白的朋友就相当于一个代理。2、再从宏观一点的角度看,我们的操作系统也是一个代理模式,它是基于硬件和软件之间这么一个中间层、代理层。3、如果你接触过三层架构,那我想你一定知道哪三层,模型层(Model)、数据访问层(DAL)、业务逻辑层(BLL)。其实业务逻辑层就是相当于一个代理层。4、再比如生活中的这么一个例子,在大学校园里有些同学会做这
阅读全文
摘要:定义策略模式定义一系列算法,把它们一个个封装起来,并且使它们可互相替换,该模式使得算法可独立于使用它的客户而变化。动机在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。如何在运行时根据需要透明地更改对象的算法?将算法与对象本身解耦,从而避免上述问题?看下面的策略者模式的结构图和基本代码,策略者模式比较简单,下面只是给出基本的代码实现。策略者模式结构图:策略模式的定义说的实在太抽象了,可能你读过去的时候捉不住他的要点。在大话设计模式里这么说的,更好理解一些:策略模式是一种定义了一系列算法的
阅读全文
摘要:适配器模式分为两种,一种是对象的适配器模式,另一种是类的适配器模式。我们知道C#是单继承的,C++是多继承的。类的适配器适合用于多继承的,所以这篇文章就只讲对象的适配器。我们先来理解一下什么是适配器模式?1、在我们的生活中其实经常需要用到适配器模式的地方,例如我们的手机充电器,我们知道我国的电源电压是220V的,但是手机电池能接受的电压是3-7V,为了使得手机电池能接受220V的电源电压,需要一个变压器,把220V电压转成3-7V的电压,那么这个变压器我们就可以理解成是一个适配器。(将不适合的电压变成适合手机电池的电压)(手机充电器)2、再举个例子,春晓家里有三个房间,一开始这三个房间都是睡房
阅读全文
摘要:其实有很多设计模式并没有像网上一些文章那样写的很复杂,理解了一下后发现他的实现原理很清晰。比如建造者设计模式。 建造者设计模式又叫生成器模式,我们不要叫他生成器模式,我觉的这个名字不好听。我比较喜欢建造者设计模式这个名字。 先来了解一下建造者设计模式是什么? 假设你是一个帮别人组装电脑主机的人,那么可以说,这时你就是充当建造者设计模式里指挥者这么一个角色。试想一下你要怎么样帮客户组装一台主机?装主机的人一般会先确定客户需要的主机配置,例如客户要求主板用华硕的,内存用金斯顿的,硬盘用西部数据的,CPU用因特尔的,电源用航嘉的,机箱用长城的……,先确定好后,再进行组装主机。 作为装主机...
阅读全文
摘要:我接触的设计模式不多,在我接触不多的设计模式里,我觉的单例模式和模板方法模式是最好理解的两种设计模式了。我们先通过文字简单的理解一下什么是模板方法模式,然后用C#代码来写一个小例子加深一下了解,当然所谓的加深是相对初学者的加深。先从字面上理解一下什么是模板方法设计模式,什么是模板?1、我想很多人都懂甚至接触过,特别是对于大多数中学时考试成绩不理想的同学包括我,在那时候总是希望优秀的同学完成的作业借我们抄一下,然后我们只是在自己的作业本上改上自己的名字和简单的必要修改,那便可以交作业了,优秀同学已经写好的作业我们可以看作是模板,简单的必要修改和改名字这部份我们可以当作需要实现的虚类。2、还有例如
阅读全文
摘要:目前我对设计模式方面了解的不多,会的设计模式五根手指头就能数完。怎么写好设计模式让读者看懂真的要讲究一下技巧,不能单纯的贴代码并对代码作解释,我觉的《大话设计模式》就是一本讲设计模式很好的书,那本书通过故事的形式讲解让人联想思考下去。由于水平有限,所有这篇文章没什么讲解的,只是写一下自己使用抽象工厂实现多数据库切换的实现过程。例子的目的 有时候项目里使用的是ACCESS数据库,可是突然有一天想更改成MSSQLSERVER数据库,为了防止整站代码重写这种局面,可以使用抽象工厂+反射实现修改一下配置字符串就能实现ACCESS的MSSQLSERVER数据库的切换。实现过程1、数据库的建立为了例子的.
阅读全文