c#所有设计模式及源代码_第1页
c#所有设计模式及源代码_第2页
c#所有设计模式及源代码_第3页
c#所有设计模式及源代码_第4页
c#所有设计模式及源代码_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C#设计模式总结各位亲们,在网上很难找到所有设计模式的说明及源代码,尤其C#更是比较少,本人最近花了点时间罗列了二十多种设计模式,希望能对写程序朋友尤其需要软考的朋友有所帮助,如果有需要源代码和类图的朋友,请到温尔保免费索取,以便我们进行探讨和您对此文档的指正,当然别忘了关顾我的小店哦,谢谢!由于能力有限,对有些模式理解不正确,敬请谅解和指正,愿我们一同进步,一同学习,本人的QQ是1070837561。一、简单工厂模式1.概念从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactoryMethod)模式,但不属于23种GOF设计模式之一。简单工厂模式是由

2、一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。2.类图皮鞋-1+皮鞋信息():stringz调用者男皮鞋女皮鞋+皮鞋信息:string+皮鞋信息():string皮鞋工厂+生产皮鞋():皮鞋工厂3.a)b)c)4.使用场景工厂类负责创建的对象比较少;客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用代码上温尔保免费索取所有模式的源代码。二、工厂方法模式1、概念工厂方法(FactoryMethod)模式的意义是定义一个创建产品对象的工

3、厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。2、类图3、使用场景调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来;只是需要一种产品,而不想知道也不需要知道究竟是哪个工厂为生产的,即最终选用哪个具体工厂的决定权在生产者一方,它们根据当前系统的情况来实例化一个具体的工厂返回给使用者,而这个决策过程这对于使用者来说是透明的。4、代码上温尔保免费索取所有模式的源代码。三、单例模式1、概念单例模

4、式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。皮鞋工厂-皮鞋工厂单例+皮鞋工厂单例()2、类图if(皮鞋工厂单例=null)_皮鞋工厂单例=new皮鞋工厂();return皮鞋工厂单例;3、使用场景资源共享的情况下,避免由于资源操作时导致的性能或损耗等;控制资源的情况下,方便资源之间的互相通信。4、代码上温尔保免费索取所有模式的源代码。四、构建模式1、概念构建模式将一个复杂对象的构建与它的表

5、示分离,使得同样的构建过程可以创建不同的表示,构建模式是一步步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不知道内部的具体构建细节。2、类图interface皮鞋制作接口JI-皮鞋制作指挥-皮鞋制作接口+指挥皮鞋制作()publicvoid指挥皮鞋制作()_皮鞋制作接口车包();_皮鞋制作接口做包();_皮鞋制作接口夹包();_皮鞋制作接口包装();男皮鞋制作实现-男皮鞋+车包()+做包()+夹包()+包装()+获得皮鞋():皮鞋接口interface皮鞋接口男皮鞋-已车包bool-已做包bool-已夹包bool-已包装bool3、使用场景当创建复杂对象的算

6、法应该独立于该对象的组成部分以及它们的装配方式时;当构造过程必须允许被构造的对象有不同表示时。4、代码上温尔保免费索取所有模式的源代码。五、原型模式1、概念原型模式指定创建对象的种类,并且通过复制这些原型创建新的对象。原型模式允许一个对象再创建另一个可定制的对象,根本无须知道任何创建的细节。工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象复制自己来实施创建过程。2、类图皮鞋原型a+Clone()A皮鞋原型实现3、使用场景类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等;通过new产生一个对象需要非常繁琐的数据准备或访问权限;原型模式很少单独

7、出现,一般是和工厂方法模式一起出现,通过clone的方法创建一个对象,然后由工厂方法提供给调用者。4、代码上温尔保免费索取所有模式的源代码。六、适配器模式1、概念适配器模式将一个接口转换成为客户想要的另一个接口,适配器模式使接口不兼容的那些类可以一起工作。2、类图3、使用场景系统需要使用现有的类,而现有类不符合当前系统的要求;系统要建立一个可以重复使用的类,用来与彼此没有太大关联的类或者在将来要引用的类一起工作。4、代码上温尔保免费索取所有模式的源代码。七、合成模式1、概念合成模式组合多个对象形成树形结构以表示整体-部分的结构层次。合成模式对单个对象和合成对象的使用具有一致性。合成模式提供一个

8、树结构中所有对象的统一接口,规范树中单独对象和合成对象的构建过程,合成模式更像一个数据结构。2、类图interface皮鞋接口G7X3、使用场景遇到对象组合的情况,同时也符合树结构。4、代码上温尔保免费索取所有模式的源代码。八、装饰模式1、概念装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。就增加对象功能来说,装饰模式比生成子类实现更为灵活。2、类图3、使用场景想透明并且动态地给对象增加新的职责的时候;给对象增加的职责,在未来存在增加或减少可能;用继承扩展功能不太现实的情况下,应该考虑此模式。4、代码上温尔保免费索

9、取所有模式的源代码。九、代理模式1、概念代理模式为其他对象提供一个代理或地方以控制对这个对象的访问。当客户向代理对象第一次提出请求时,将实例化为真实的对象,并且将请求传给它,以后所有的客户请求都经由代理转给封装了的真实对象。2、类图3、使用场景当实际业务逻辑需要与实际使用者解耦,使用者并不知道实现者的存在,只需要使用中间代理即可完成相应的业务运算。4、代码上温尔保免费索取所有模式的源代码。十、亨元模式1、概念亨元模式运用共享技术有效地支持大量细粒度的对象。系统只使用少量的对象。而这些对象都相近、状态变化很小、对象使用次数较多。2、类图2、3、4、1、2、使用场景a)系统中有大量的对象,他们使系

10、统的效率降低;b)这些对象的状态可以分离出所需要的内外两部分。代码上温尔保免费索取所有模式的源代码。门面模式概念门面模式也称为外观模式,提供一个统一的接口去访问多个子系统的多个不同的接口。门面模式定义了一个高层次的接口,使得子系统更容易被使用。类图3、使用场景客户只需要使用某个复杂系统的子集,或者需要以一种特殊的方式与系统交互时,使用门面模式;当需要跟踪原系统的使用情况时,使用门面模面模式。因为所有对系统的访问都经过门面,所很可以容易的监视系统的使用;希望封装和隐藏原系统时;编写新类的成本小于所有人使用和维护原系统使用所需的成本时。4、十二、1、代码上温尔保免费索取所有模式的源代码。桥接模式概

11、念桥接模式将抽象部分与实现部分分离,使得他们两部分可以独立地变化。桥接模式是构造型的设计模式之一。桥接模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。类图4、3、4、十三、1、2、3、使用场景当一个对象有多个变化因素的时候依赖抽象;当某个变化因素在多个对象中共享时。我们可以抽象出这个变化因素,然后实现这些不同的变化因素;当我们期望一个对象的多个变化因素可以动态的变化,而且不影响客户的程序的使用时。a)b)通过抽象这些变化因素,将依赖具体实现,修改为c)代码上温尔保免费索取所有模式的源代码。策略模式概念策略模式定义一系列的算法,将每一个算法封装起来,并让它们

12、可以相互替换。策略模式让算法独立于使用它的客户而变化。类图应用场景多个类只区别在表现行为不同,可以使用策略模式,在运行时动态选择具体要执行的行为;需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现;对客户隐藏具体策略(算法)的实现细节,彼此完全独立。代码上温尔保免费索取所有模式的源代码。十四、模板方法模式1、概念模板方法模式定义一个操作中算法的骨架,以将一些步骤延缓到子类中实现。模板方法让子类重新定义一个算法的某些步骤而无须改变算法的结构。抽象皮鞋调用者-是否为女鞋_+生产模板()1仝2、类图男皮鞋女皮鞋-是否为女鞋=true3、使用场景多个子类有公有的方法,并且逻辑

13、基本相同时;重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现;重构时,模板方法模式是一个经常使用的模式,把相同的代码抽取到父类中,然后通过钩子函数(见“模板方法模式的扩展”)约束其行为。4、代码上温尔保免费索取所有模式的源代码。十五、迭代器模式1、概念迭代器模式提供一种方法可以访问聚合对象,而不用暴露这个对象的内部表示。迭代器模式是为容器而生。2、类图皮鞋迭代实现interface皮鞋接口interface皮鞋迭代接口ainterface皮鞋容器接口+remove()+first()+hasNext()+next()皮鞋容器实现+迭代器()3、使用场景访问一个

14、聚合对象的内容而无须暴露它的内部表示储分离,使得访问聚合对象时无须了解其内部实现细节;a)将聚合对象的访问与内部数据的存b)需要为一个聚合对象提供多种遍历方式;4、十六、1、2、抽象皮鞋生产厂-规模更大继任者厂3、4、十七、1、2、使用场景假如使用if-else语句来组织一个责任链时感到力不从心,代码看上去很糟糕时,就可以使用责任链模式来进行重构。代码上温尔保免费索取所有模式的源代码。命令模式概念命令模式将一个请求封装成一个对象,因此可以参数化多个客户的不同请求,将请求队列,记录请求日志,并且支持撤销操作。类图为遍历不同的聚合结构提供一个统一的接口,在该接口的实现类中为不同的聚合结构提供不同的

15、遍历方式,而客户端可以一致性地操作该接口。代码上温尔保免费索取所有模式的源代码。责任链模式概念责任链模式是面向对象中的一种软件设计模式,它包含了一些命令对象和一些处理对象,每个处理对象决定它能处理那些命令对象,它也知道应该把自己不能处理的命令对象交下一个处理对象该模式还描述了往该链添加新的处理对象的方法。类图规模大皮鞋厂规模中等皮鞋厂规模小皮鞋厂+是否能生产()3、使用场景使用命令模式作为CallBack在面向对象系统中的替代。CallBack讲的便是先将一个函数登记上,然后在以后调用此函数。需要在不同的时间指定请求、将请求排队。一个命令对象和原先的请求发出者可以有不同的生命期。换言之,原先的

16、请求发出者可能已经不在了,而命令对象本身仍然是活动的。这时命令的接收者可以是在本地,也可以在网络的另外一个地址。命令对象可以在串形化之后传送到另外一台机器上去。系统需要支持命令的撤消(undo)。命令对象可以把状态存储起来,等到客户端需要撤销命令所产生的效果时,可以调用undo()方法,把命令所产生的效果撤销掉。命令对象还可以提供redo()方法,以供客户端在需要时,再重新实施命令效果。如果一个系统要将系统中所有的数据更新到日志里,以便在系统崩溃时,可以根据日志里读回所有的数据更新命令,重新调用Execute()方法一条一条执行这些命令,从而恢复系统在崩溃前所做的数据更新。4、十八、1、代码上

17、温尔保免费索取所有模式的源代码。备忘录模式概念在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存前的状态。2、类图3、4、十九、1、2、皮鞋生产状态备录器+创建状态备录()+恢复状态()+获得状态()+设置状态()皮鞋生产状态备恢复器皮鞋生产状态备录生产状态+获得状态()+设置状态()-状态备+获得状态备录()+保存状态备录()使用场景需要保存一个对象在某一个时刻的状态或部分状态;当系统功能比较复杂,而且需要记录历史属性以便当需要时做恢复动作。代码上温尔保免费索取所有模式的源代码。状态模式概念状态模式能够使一个对象的内在状态改变时允许改变

18、其行为,是这个对象看起改变了其类类图二十3、4、1、2、3、使用场景a)当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式来;b)一个操作中含有庞大的分支结构,并且这些分支决定于对象的状态。代码上温尔保免费索取所有模式的源代码。访问者模式概念访问者模式说明一个操作执行于一个对象结构的成员中。访问者模式让我们定义一个类的新操作而无须改变它操作的这些成员。类图I皮鞋访问者抽象名牌皮鞋访问者杂牌皮鞋访问者+获得访问者(男皮鞋皮鞋)()+获得访问者(女皮鞋皮鞋)()、皮鞋工厂/+清点皮鞋()1*皮鞋抽象+清点应答(皮鞋访问者抽象访问者)()男皮鞋女皮鞋应

19、用场景a)一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作。b)需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而你想避免让这些操作“污染”这些对象的类。Visitor模式使得你可以将相关的操作集中起来定义在一个类中c)当该对象结构被很多应用共享时,用Visitor模式让每个应用仅包含需要用到的操作。d)定义对象结构的类很少改变,但经常需要在此结构上定义新的操作。改变对象结构类需要重定义对所有访问者的接口,这可能需要很大的代价。如果对象结构类经常改变,那么可能还是在这些类中定义这些操作较好。4、代码二十一、1、2、解释器模式概念解释器模式是类的行为模式。给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。3、4、二十二1、2、使用场景当有一个语言需要解释执行,并且你可将该语言

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论