C#设计模式
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。此专栏为C#编写的设计模式实现。
小何同学_
态度决定高度 细节决定成败
展开
-
【C#设计模式-备忘录模式】
一.备忘录模式的定义:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。二.备忘录模式的结构和角色:1.Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻自身的内部状态,并可使用备忘录恢复内部状态。Originator可以根据需要决定Memento存储自己的哪些内部状态。2.Mem原创 2016-05-11 17:59:09 · 6020 阅读 · 0 评论 -
【C#设计模式-访问者模式】
一.访问者模式的定义:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。二.访问者模式的结构和角色:1.Visitor 抽象访问者角色,为该对象结构中具体元素角色声明一个访问操作接口。该操作接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色,这样访问者就可以通过该元素角色的特定接口直接访问它。2.Concret原创 2016-05-11 15:09:38 · 6397 阅读 · 2 评论 -
【C#设计模式-责任链模式】
一.责任链模式的定义:责任链模式指的是——某个请求需要多个对象进行处理,从而避免请求的发送者和接收之间的耦合关系。将这些对象连成一条链子,并沿着这条链子传递该请求,直到有对象处理它为止。二.责任链模式的结构和角色:抽象处理者(Handler)角色:定义出一个处理请求的接口。如果需要,接口可以定义 出一个方法以设定和返回对下家的引用。这个角色通常由一个Java抽象类或者Java接原创 2016-05-11 11:46:56 · 1884 阅读 · 1 评论 -
【C#设计模式-策略者模式】
一.策略者模式定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。二. 策略者模式的组成:抽象策略角色: 策略类,通常由一个接口或者抽象类实现。具体策略角色:包装了相关的算法和行为。环境角色:持有一个策略类的引用,最终给客户端调用。三.策略者模式的实现:在现实生活中,针对员工的收入情况,会收原创 2016-05-10 12:00:26 · 1048 阅读 · 0 评论 -
【C#设计模式-状态模式】
一.状态模式的定义:状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。二.状态模式的意图:允许一个对象在其内部状态改变时改变它的行为。三.状态模式的适用场景:1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。2.一个操作中含有庞大的多分支结构,并且这些分支决定于对象原创 2016-05-10 11:04:38 · 2435 阅读 · 0 评论 -
【C#设计模式-观察者模式】
一.基本简介:观察者设计模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。在现实生活中的可见观察者模式,例如,微信中的订阅号,订阅博客和QQ微博中关注好友,这些都属于观察者模式的应用。二.实现:比如热水器在烧水的过程中,当水温即将烧开时,会发出报警的声音,显示器上会出现温度监控 public interface IObserve原创 2016-05-09 14:08:38 · 2517 阅读 · 1 评论 -
【C#设计模式-中介者模式】
一.概述:中介者模式,定义了一个中介对象来封装一系列对象之间的交互关系。中介者使各个对象之间不需要显式地相互引用,从而使耦合性降低,而且可以独立地改变它们之间的交互行为。二.例子:QQ游戏平台,聊天室、QQ群和短信平台,这些都是中介者模式在现实生活中的应用。三.结构:者模式设计两个具体对象,一个是用户类,另一个是中介者类,根据针对接口编程原则,则需要把这两类角色进行抽象,所以中介者原创 2016-05-06 16:39:51 · 2460 阅读 · 1 评论 -
【C#设计模式-迭代器模式】
一.概述:迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。二.适用性:访问一个聚合对象的内容而无需暴露它的内部表示支持对聚合对象的多种遍历为遍历不同的聚合结构提供一个统一的接口三.结构:迭代器角色(Iterator):迭代器角色负责定义访问和遍历元素的接口具体迭代器角色(Concrete Iterar原创 2016-05-06 12:07:24 · 4326 阅读 · 0 评论 -
【C#设计模式-命令模式】
一.定义: 命令模式是将一类对象的功能操作进行抽象,一般来说,这些对象有相同的方法,所以这类对象有着类似的操作,我们通过抽象,就可以定义出一个命令对象,通过这样的方式,用户程序在使用的时候,只与该命令对象打交道,而不用与一类对象打交道,降低了耦合性,提高了程序设计的灵活性。二.实现:引入生活中的例子,在执行一次考始终,考试办公室发起考试给监控员,监控员发卷学生开始考试,考试办公室通知传达手卷到原创 2016-05-04 15:06:23 · 1674 阅读 · 1 评论 -
【C#设计模式-模板模式】
一.定义:在一个抽象类中定义一个操作中的算法骨架(对应于生活中的大家下载的模板),而将一些步骤延迟到子类中去实现(对应于我们根据自己的情况向模板填充内容)。模板方法使得子类可以不改变一个算法的结构前提下,重新定义算法的某些特定步骤,模板方法模式把不变行为搬到超类中,从而去除了子类中的重复代码。二.实现:引用生活中上班的例子,员工上班遵循前往上班目的地,上班打卡,然后执行自己的工作,最后下班打卡原创 2016-05-04 12:33:37 · 847 阅读 · 0 评论 -
【C#设计模式-代理模式】
一.定义:在软件开发过程中,一些对象有时候会由于网络或其他的障碍,不能够或者不能直接访问到这些对象,如果直接访问对象会给系统带来不必要的复杂性,这时候可以在客户端和目标对象之间增加一层中间层,让代理对象代替目标对象,然后客户端只需要访问代理对象,由代理对象去帮我们去请求目标对象并返回结果给客户端,这样的思路就是代理模式。二.代理模式的种类:1.远程(Remote)代理:为一个位于不同的地址原创 2016-05-04 11:18:16 · 1098 阅读 · 0 评论 -
【C#设计模式-享元模式】
一.概述:享元模式(英语:Flyweight Pattern)是一种软件设计模式。它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。二.两个状态:内蕴状态存储在享元内部,不会随环境的改变而有所不同,是可以共原创 2016-05-03 18:11:12 · 2198 阅读 · 0 评论 -
【C#设计模式-外观模式】
一.概述:外观模式,为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。二.结构:Facade这个外观类为子系统提供一个共同的对外接口,Clients客户对象通过一个外观接口读写子系统中各接口的数据资源。三.实现:比如现在有一个系统,里面有两个子系统,在子系统B执行成功,才能执行系统A中的逻辑。 public class SystemA原创 2016-05-03 12:45:10 · 1948 阅读 · 0 评论 -
【C#设计模式-组合模式】
一.概述:组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。二.组合模式经典案例:系统目录结构,网站导航结构等三.实现代码:通过生活中画图形的案例,复杂图形的画法来自但个图形的组合。 /// /// 图形抽象类 /// public abstract class Graphics原创 2016-05-03 11:46:53 · 2243 阅读 · 0 评论 -
【C#设计模式-装饰者模式】
一.装饰者模式的定义:装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。二.装饰者模式的实现:这里应用显示生活中的例子,我们买了一部新手机,慢慢的给这部手机添加新的装饰,比如说贴膜,添加挂件.....首先抽象出手机类,作为装饰者模式中的抽象组件: /// /// 手机抽象类,即抽象者模原创 2016-04-29 12:54:37 · 2321 阅读 · 0 评论 -
【C#设计模式-桥接模式】
一.桥接模式定义:桥接模式即将抽象部分与实现部分脱耦,使它们可以独立变化。二.桥接模式的实现:我先引进一个生活中的例子,这里引用一个电视遥控器的例子,对于每一个牌子的遥控器,都有对于的遥控器来控制,这时候我们想到的设可能是:抽象一个遥控器接口,里面有待实现的开机,关机,换图这样一组功能方法。然后创建具体的遥控器类去继承这个接口,实现里面的方法。这样可以满足每个电视机都实现了自己原创 2016-04-29 11:23:54 · 2414 阅读 · 1 评论 -
【C#设计模式-适配器模式】
1.适配器模式一般的额使用情况:在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用。但是新环境要求的接口是这些现存对象所不满足的。如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?Adapter 模式为我们很好的解决这类问题。2.列举生活中存在的例子进行说明:这里我们以日志记录程序为Demo说明,在任何一套软原创 2016-04-26 12:48:25 · 3069 阅读 · 4 评论 -
【C#设计模式-建造者模式】
在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?这就是要说的建造者模式。本文通过现实生活中的建房子的例子,来原创 2016-04-25 17:43:30 · 1806 阅读 · 0 评论 -
【C#设计模式-原型模式】
创建型模式中一个比较特殊的模式-原型模式,这个模式呢,有个最大的特点是克隆一个现有的对象,这个克隆的结果有2种,一种是浅度复制,另一种是深度复制。创建型模式一般是用来创建一个新的对象,然后我们使用这个对象完成一些对象的操作,我们通过原型模式可以快速的创建一个对象而不需要提供专门的new()操作就可以快速完成对象的创建,这无疑是一种非常有效的方式,快速的创建一个新的对象。一.浅度复制:先原创 2016-04-25 13:18:59 · 2924 阅读 · 0 评论 -
【C#设计模式-单例模式】
单例模式就是保证在整个应用程序的生命周期中,在任何时刻,被指定的类只有一个实例,并为客户程序提供一个获取该实例的全局访问点一:经典模式:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication3{ ///原创 2016-04-22 18:48:43 · 4076 阅读 · 0 评论 -
【C#设计模式-抽象工厂模式】
抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。应用场景:一个生产集团,在北京的工厂需要生产A类汽车,A类电视;在上海的工厂需要生产B类汽车,A类电视。而在广州的工厂需要生产C类汽车,C类电视。我们可以使用抽象原创 2016-04-20 13:04:12 · 2588 阅读 · 0 评论 -
【C# 设计模式-工厂方法模式】
在上一篇博文【C#设计模式-简单工厂模式】中,我们使用简单工厂模式实现了:如果有一个住户管理系统,里面的住户类型是可变的,每一种租户类型的租金计算公式都存在差异例如:A类型的住户租金额=天数*单价+绩效*0.005 B类型的住户租金额=月份*(每月价格+performance*0.001)这里我们虽然实现了客户的需求,但是如果客户后期需要增加了C类型商店和D类型原创 2016-04-19 11:40:12 · 13857 阅读 · 0 评论 -
【C# 设计模式-简单工厂模式 】
网上有很多关于类似工厂模式的博客,大都说明的很详细,这里我结合在项目中的体会简单说一下!介绍:简单工厂模式不能说是一个设计模式,说它是一种编程习惯可能更恰当些。因为它至少不是Gof23种设计模式之一。但它在实际的编程中经常被用到,而且思想也非常简单,可以说是一个工厂方法模式的一个引导。引入实际情况:如果有一个住户管理系统,里面的住户类型是可变的,每一种租户类型的租金计算公式都存在差原创 2016-04-18 18:01:43 · 4379 阅读 · 3 评论