随笔分类 -  C#设计模式

摘要:一、引出模式在软件开发中,我们经常会遇到树型目录的功能,比如:管理商品的目录如果让你来实现这个功能,你会怎么做呢?我们先来分析分析:商品类别树上的节点有三类,根节点、树枝节点和叶子节点,在进一步根节点和树枝节点都是可以包含其他节点的,我们就叫它容器节点。这样,商品类别树就分为了容器节点和叶子节点,我们将它们分别实现成为对象。代码示例:class Program { static void Main(string[] args) { //定义所有的组合对象 Composite root = new Composite(... 阅读全文
posted @ 2013-12-20 20:00 烧点饭 阅读(794) 评论(0) 推荐(0) 编辑
摘要:一、引出模式在前面的模式中,我们已经组装好了一台电脑,现在要做的是开机。是的,开机!对用户们来说开机只不过是按个电源按钮,跟喝水一样简单!但对于我们搞技术的,就不一样了,可这其中又发生了什么不为人知的事呢?自己百度去!我们先简单将以下流程,不做深入讲解。首先加载电源,然后设备自检,接下来装在操作系统,最后电脑就启动了。可是谁来完成这些过程?如何完成的呢?总不能让用户做这些吧,其实真正完成这些功能的是主板。那客户和主板又是怎么联系的呢?现实中,使用连接线将按钮连接到主板上,这样当用户按下按钮时,就相当与发命令给主板,让主板去完成后续工作。想想,在这里有没有什么问题?我们把这种情形放到软件开发中看 阅读全文
posted @ 2013-12-17 19:43 烧点饭 阅读(688) 评论(0) 推荐(0) 编辑
摘要:观察者模式一、引出模式 在生活中,观察者模式非常的常见,比如到邮局、报社订阅报纸,比如QQ邮箱订阅,在比如你玩微博,关注了某“大婶”,“大婶”发布消息时,你也会相应的收到信息。 在软件开发中,就是这么一种情况。当一个对象的状态发生改变时,如何让依赖于它的所有对象得到通知,并进行相应的处理?二、认识模式1.模式定义 定义对象间一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 关键词:一对多,状态改变,得到通知,自动更新2.解决思路 我们来看下订阅报纸的例子。对于报社来说,它开始是不知道有多少个订阅者来订阅报纸,因此,报社是需要维护一个订阅者的... 阅读全文
posted @ 2013-12-11 19:56 烧点饭 阅读(768) 评论(0) 推荐(0) 编辑
摘要:一、引出模式在生活中,当电脑缺少了一块主板,那会怎么样?如果有人这样问我的话,我就会马上跳出来说“这电脑肯定报废了”,当然这不是重点。假如少了主板电脑还可以用的话,想想,里面的CPU、显卡、声卡、光驱、硬盘等等,不是就要我们自己用线把它们连起来。想想就觉得头疼,那么现在你觉得主板在电脑里扮演着什么角色呢?在软件的开发过程中,势必会碰到这样一种情况,多个类或多个子系统相互交互,而且交互很繁琐,导致每个类都必须知道他需要交互的类,这样它们的耦合会显得异常厉害。牵一发而动全身又不木有啊!好了,既然问题提出来了,那有请我们这期的主角——中介者模式出场吧!二、认识模式1.模式定义用一个中介者对象来封装一 阅读全文
posted @ 2013-12-09 21:06 烧点饭 阅读(13585) 评论(2) 推荐(5) 编辑
摘要:一、引出模式代理,在生活我我们非常常见。比如在中学时期,总追过女孩子吧!身为码农的我们,没追过也没关系,总看过别人追过女孩子吧!这里出现了3个重要人物,甲想追求乙,但甲又不认识乙,幸好乙的闺蜜丙是甲的小学同学,于是呢,甲就通过丙给乙传递一些纸条,情书之类的。在这里面同学丙就充当着一个代理的角色,甲无法直接找到乙说话,只能通过丙给乙传递消息。二、认识模式1.定义:代理模式为目标对象提供一种代理,并由该代理对象控制对这个目标对象的访问。2.模式结构和说明Subject:目标接口,定义代理和具体目标对象的接口,这样就可以在任何地方使用具体目标对象的地方使用代理对象。RealSubject:具体的目标 阅读全文
posted @ 2013-11-29 12:07 烧点饭 阅读(607) 评论(0) 推荐(0) 编辑
摘要:一、引出模式1.生活中的例子大家都是知道,天朝家用电器的标准电压和美国标准电压是不同的,也就是我们把在天朝买的笔记本带到美国去也无法正常使用的,想要使用就必须跟换电源适配器。将电源适配器的电压换成适应美国的电压就可以正常使用的。而这个电源适配器的功能就是本篇所要学习的主题“适配器(Adapter)”。2.软件实例比如现在要做一个日志记录的系统,在第一版中使用文件为载体,可以对日志文件进行新增和删除,随着业务的扩大,文件日志已无法满足需求,于是在第二版中采用了数据库来存储日志,并能对日志进行CRUD。由于客户的多变,现在告诉你,这两种功能都要。问题出现了,就是第二版中定义的接口,对第一版并不是适 阅读全文
posted @ 2013-11-23 14:27 烧点饭 阅读(443) 评论(0) 推荐(0) 编辑
摘要:本篇学习的是门面模式,又称外观模式,个人感觉还是觉得门面模式比较形象,是一种结构型模式。一、引出模式在生活中,比如我们准备自己配一台电脑,一种解决方案就是自己去电子市场一家一家的去询问,去购买,无疑这样是很浪费时间和精力的,另外一种解决方案就是直接去找一家装机公司,你把需求告诉它,它自然就会把相应的... 阅读全文
posted @ 2013-11-21 11:05 烧点饭 阅读(570) 评论(1) 推荐(1) 编辑
摘要:一、引出模式开发场景:在前面工厂方法模式中我们提到出将数据以XML、TXT和数据库形式导出。现在我们再深化一下,对导出数据的格式进行约束。导出的文件,不管是格式,都分为文件头、文件体和文件尾文件头部分,需要描述:分公司名称、数据导出时间,文件体部分,需要描述:表的名称,单独一行。还有一些数据描述。文件尾部分,需要描述:导出人。当我们不使用模式时,不管是输出输出成文本文件还是,输出到XML,步骤基本上是不变的,都要经过以下四步1) 拼接文件头内容2) 拼接文件体内容3) 拼接文件尾内容4) 将内容输出到相应格式现在就是存在在使用输出格式时,都会重复这几个处理步骤,我们应该将其提炼出来,形成公共的 阅读全文
posted @ 2013-11-19 15:05 烧点饭 阅读(894) 评论(0) 推荐(0) 编辑
摘要:本篇和大家一起学习IoC和DI即控制反转和依赖注入。当然听上去这词语非常的专业,真不知道是怎么组出来的,看上去难归看上去难,但稍微理解一下也就这么回事了。首先我们要明白IoC/DI干嘛用的,不然别人问“你知道IoC/DI吗?”,“知道啊!”,“那干嘛用的?”,呵呵,就郁闷了,其实IoC/DI的作用就两个字——解耦,说一千道一万,还是离不开这两个字。所以,IoC/DI的作用就是解耦。至于为什么要解耦,解耦在面向对象开发中的重要性在这里就不做细说了。下面我们来认识一下它们的真面目吧!要理解IoC/DI两个概念,就必须搞清楚如下问题:参与者都有谁?依赖:谁依赖于谁?为什么需要依赖?注入:谁注入谁?到 阅读全文
posted @ 2013-11-15 13:25 烧点饭 阅读(2330) 评论(1) 推荐(2) 编辑
摘要:前面已经学习简单工厂、工厂方法以及抽象工厂,本篇学习的是探究这三种工厂之间的区别与联系。在面向对象的设计中,对象的管理是其核心所在。其中,对象的创建是对象管理的第一步。对象的创建非常简单,在C#中,只需要使用new操作符调用对象的构造函数即可。因此,管理对象最重要的是掌握创建对象的时机。我们首先从对象的特征来看。代表抽象意义的类型,有接口和抽象类,但它们是不能创建对象实例的,这就意味着我们要创建的对象都是与具体的对象类型有关的。也就是说,创建对象的过程必将涉及设计中的实现细节,从而导致创建者与具体的被创建者之间的耦合增强。从而就引出了工厂三剑客了!简单工厂:提供一个创建对象实例的功能,而无需关 阅读全文
posted @ 2013-11-14 16:57 烧点饭 阅读(1005) 评论(0) 推荐(0) 编辑
摘要:本篇讲的是抽象工厂模式。一、引出模式场景:我们在组装电脑时,通常会选择一系列的配件,比如CPU、硬盘、内存等。这里只讨论CPU和主板。在选择CPU时,也会有它的品牌、型号、针脚数目等。在选择主板时,也会有它的品牌、芯片组等。在装机之前还有考虑这些配件之间的兼容性,也就是说,里面选择的各个配件之间是有关联的。对于装机人来说,他只知道要组装电脑,需要相应的配件,但是具体用什么配件,还是客户说了算。也就是说装机人只负责组装,而客户负责选择装机所需要的具体配件。那我们使用程序来实现上面的过程吧!对于客户,它需要选择自己需要的CPU和主板,然后告诉装机人自己的选择,接下来就等着装机人组装电脑。对于装机人 阅读全文
posted @ 2013-11-12 11:13 烧点饭 阅读(1364) 评论(1) 推荐(0) 编辑
摘要:前面一篇已经说了简单工厂,那就趁热打铁,开始讲述工厂方法吧。一、引出模式开发场景:实现一个导出数据的应用框架,让客户来选择导出数据的方式,并执行真正的数据导出。导出数据的方式可以是导出到文本文件,导出到XML,导出到Excel,导出到数据库等。好了,我们大概来想一下思路,对于上面的应用框架,导出来的... 阅读全文
posted @ 2013-11-07 14:12 烧点饭 阅读(1357) 评论(2) 推荐(1) 编辑
摘要:学习GOF23种设计模式,从学习简单工厂开始是个不错的选择,简单工厂虽不属于GOF设计模式中的一种,但它在开发中是非常常用的,也充分体现了面向对象开发的要点和好处,所以理解简单工厂,对于后面学习其它的模式是非常有帮助的。一、引出模式我们时常听说面向对象开发很厉害,所以在开发中我们会时不时尝试用面向对... 阅读全文
posted @ 2013-11-04 15:02 烧点饭 阅读(1548) 评论(0) 推荐(3) 编辑
摘要:本篇会讲解在UML类图中,常见几种关系: 泛化(Generalization),依赖(Dependency),关联(Association),聚合(Aggregation),组合(Composition)。1.泛化关系泛化关系是继承或实现的关系,是is a关系,具体表现为类与类的继承,接口与接口的继... 阅读全文
posted @ 2013-10-31 17:03 烧点饭 阅读(13444) 评论(9) 推荐(6) 编辑