随笔分类 -  19 .NET设计模式

设计模式(24):行为型模式(十一) 解释器模式(Interpreter)
摘要:一、动机(Motivate) 在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。在这种情况下,将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。二、意图(Intent) 给 阅读全文

posted @ 2019-08-16 10:22 springsnow 阅读(482) 评论(0) 推荐(0) 编辑

设计模式(23):行为型模式(十) 备忘录模式(Memento)
摘要:一、动机(Motivate) 我们看上图,一个对象肯定会有很多状态,这些状态肯定会相互转变而促进对象的发展,如果要想在某一时刻把当前对象回复到以前某一时刻的状态,这个情况用“备忘录模式”就能很好解决该问题。 在软件构建过程中,某些对象的状态在转换的过程中,可能由于某种需要,要求程序能够回溯到对象之前 阅读全文

posted @ 2019-08-16 10:11 springsnow 阅读(473) 评论(0) 推荐(0) 编辑

设计模式(22):行为型模式(九) 访问者模式(Visitor)
摘要:一、动机(Motivate) 在软件构建过程中,由于需求的改变,某些类层次结构中常常需要增加新的行为(方法),如果直接在基类中做这样的更改,将会给子类带来很繁重的变更负担,甚至破坏原有设计。如何在不更改类层次结构的前提下,在运行时根据需要透明地为类层次结构上的各个类动态添加新的操作,从而避免上述问题 阅读全文

posted @ 2019-08-16 09:43 springsnow 阅读(505) 评论(0) 推荐(0) 编辑

设计模式(21):行为型模式(八) 职责链模式(Chain of Responsibility)
摘要:一、动机(Motivate) 在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显示指定,将必不可少地带来请求发送者与接受者的紧耦合。如何使请求的发送者不需要指定具体的接受者,让请求的接受者自己在运行时决定来处理请求,从而使两者解耦。二、意图(Intent) 避 阅读全文

posted @ 2019-08-15 17:30 springsnow 阅读(262) 评论(0) 推荐(0) 编辑

设计模式(20):行为型模式(七) 策略模式(Stragety)
摘要:一、动机(Motivate) 在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。如何在运行时根据需要透明地更改对象的算法?将算法与对象本身解耦,从而避免上述问题?二、意图(Intent) 定义 阅读全文

posted @ 2019-08-15 17:25 springsnow 阅读(471) 评论(0) 推荐(0) 编辑

设计模式(19):行为型模式(六) 状态模式(State)
摘要:一、动机(Motivate) 在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生变化,比如文档处于只读状态,其支持的行为和读写状态支持的行为就可能完全不同。 如何在运行时根据对象的状态来透明地更改对象的行为?而不会为对象操作和状态转化之间引入紧耦合?二、意图(Intent) 允许一个对象 阅读全文

posted @ 2019-08-15 17:16 springsnow 阅读(654) 评论(0) 推荐(0) 编辑

设计模式(18):行为型模式(五) 中介者模式(Mediator)
摘要:一、动机(Motivate)为什么要使用中介者模式呢?如果不使用中介者模式的话,各个同事对象将会相互进行引用,如果每个对象都与多个对象进行交互时,将会形成如下图所示的网状结构。从上图可以发现,如果不使用中介者模式的话,每个对象之间过度耦合,这样的既不利于类的复用也不利于扩展。如果引入了中介者模式,那 阅读全文

posted @ 2019-08-15 17:10 springsnow 阅读(511) 评论(0) 推荐(0) 编辑

设计模式(17):行为型模式(四) 观察者模式(Observer)
摘要:一、动机(Motivate) “观察者模式”在现实生活中,实例其实是很多的,比如:八九十年代我们订阅的报纸,我们会定期收到报纸,因为我们订阅了。银行可以给储户发手机短信,也是“观察者模式”很好的使用的例子,因为我们订阅了银行的短信业务,当我们账户余额发生变化就会收到通知等。 在软件构建过程中,我们需 阅读全文

posted @ 2019-08-15 16:39 springsnow 阅读(403) 评论(0) 推荐(0) 编辑

设计模式(16):行为型模式(三) 迭代器模式(Iterator)
摘要:一、动机(Motivate) 在软件构建过程中,集合对象内部结构常常变化各异。但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素;同时这种“透明遍历”也为“同一种算法在多种集合对象上进行操作”提供了可能。 使用面向对象技术将这种遍历机制抽象为“迭代器对象 阅读全文

posted @ 2019-08-15 16:13 springsnow 阅读(394) 评论(0) 推荐(0) 编辑

设计模式(15):行为型模式(二) 命令模式(Command)
摘要:一、动机(Motivate) 在我们的现实生活中有很多例子可以拿来说明这个模式,我们还拿吃饺子这个事情来说。我的奶奶说了,今天想吃饺子,发出了命令,然后我奶奶就去看电视去了。我们夫妻俩收到命令就开始和面,做饺子馅,包饺子。饺子包好了,我们就休息一会,等下午5点就开始烧水煮饺子了,晚饭的时间到了,我奶 阅读全文

posted @ 2019-08-15 15:52 springsnow 阅读(490) 评论(0) 推荐(0) 编辑

设计模式(14):行为型模式(一) 模板方法模式(Template Method)
摘要:一、动机(Motivate) “模板方法”,就是有一个方法包含了一个模板,这个模板是一个算法。在我们的现实生活中有很多例子可以拿来说明这个模式,就拿吃饺子这个事情来说,要想吃到饺子必须经过三步,第一步是“和面”,第二步是“包馅”,第三步是“煮饺子”,这三步就是一个算法,我们要想吃到不同的面和馅的饺子 阅读全文

posted @ 2019-08-15 15:33 springsnow 阅读(328) 评论(0) 推荐(0) 编辑

设计模式(13):结构型模式(七) 代理模式(Proxy)
摘要:一、动机(Motivate) 在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者、或者系统结构带来很多麻烦。如何在不失去透明操作对象的同时来管理/控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。 阅读全文

posted @ 2019-08-14 17:30 springsnow 阅读(372) 评论(0) 推荐(0) 编辑

设计模式(12):结构型模式(六) 享元模式(Flyweight)
摘要:一、动机(Motivate) 在软件系统中,采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价——主要指内存需求方面的代价。如何在避免大量细粒度对象问题的同时,让外部客户程序仍然能够透明地使用面向对象的方式来进行操作? 二、意图(Intent) 运用共享技术有效地 阅读全文

posted @ 2019-08-14 16:46 springsnow 阅读(419) 评论(0) 推荐(0) 编辑

设计模式(11):结构型模式(五) 外观模式(Facade)
摘要:一、动机(Motivate) 在软件系统开发的过程中,当组件的客户(即外部接口,或客户程序)和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战。如何简化外部客户程序和系统间的交互接口?如何将外部客户程序的演化和内部子系统的变化之间的依赖相互解耦 阅读全文

posted @ 2019-08-14 14:53 springsnow 阅读(842) 评论(0) 推荐(0) 编辑

设计模式(10):结构型模式(四) 组合模式(Composite)
摘要:一、动机(Motivate) 在我们的操作系统中有文件夹的概念,文件夹可以包含文件夹,可以嵌套多层,最里面包含的是文件,这个概念和“俄罗斯套娃”很像。当然还有很多的例子,例如我们使用系统的时候,会使用到“系统菜单”,这个东西是树形结构。这些例子包含的这些东西或者说是对象,可以分为两类,一类是:容器对 阅读全文

posted @ 2019-08-08 15:12 springsnow 阅读(645) 评论(0) 推荐(0) 编辑

设计模式(09):结构型模式(三) 装饰模式(Decorator)
摘要:一、动机(Motivate) 在房子装修的过程中,各种功能可以相互组合,来增加房子的功用。类似的,如果我们在软件系统中,要给某个类型或者对象增加功能,如果使用“继承”的方案来写代码,就会出现子类暴涨的情况。比如:IMarbleStyle是大理石风格的一个功能,IKeepWarm是保温的一个接口定义, 阅读全文

posted @ 2019-08-06 17:23 springsnow 阅读(276) 评论(0) 推荐(0) 编辑

设计模式(08):结构型模式(二) 桥接模式(Bridge)
摘要:一、动机(Motivation) 在很多游戏场景中,会有这样的情况:【装备】本身会有的自己固有的逻辑,比如枪支,会有型号的问题,同时现在很多的游戏又在不同的介质平台上运行和使用,这样就使得游戏的【装备】具有了两个变化的维度——一个变化的维度为“平台的变化”,另一个变化的维度为“型号的变化”。如果我们要写代码实现这款游戏,难道我们针对每种平台都实现一套独立的【装备】吗?复用在哪... 阅读全文

posted @ 2019-08-05 17:37 springsnow 阅读(666) 评论(0) 推荐(0) 编辑

设计模式(07):结构型模式(一) 适配器模式(Adapter)
摘要:一、动机(Motivation)在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?二、意图(Intent)将一个类的接口转换 阅读全文

posted @ 2019-08-05 16:40 springsnow 阅读(607) 评论(1) 推荐(0) 编辑

设计模式(06):创建型模式(五) 原型模式(Prototype)
摘要:一、动机(Motivation) 在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。如何应对这种变化?如何向“客户程序(使用这些对象的程序)”隔离出“这些易变对象”,从而使得“依赖这些易变对象的客户程序”不随着需 阅读全文

posted @ 2019-08-05 16:24 springsnow 阅读(492) 评论(0) 推荐(0) 编辑

设计模式(05):创建型模式(四) 建造者、生成器模式(Builder)
摘要:一、动机(Motivation) 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分” 阅读全文

posted @ 2019-08-05 15:20 springsnow 阅读(338) 评论(0) 推荐(0) 编辑

导航

点击右上角即可分享
微信分享提示