随笔分类 -  设计模式

这里罗列一些关于设计模式的东西进来
摘要:中介者模式 在asp.net core中实现进程内的CQRS时用mediatR是非常方便的,定义command,然后定义commandhandler,或者notification和notificationhandler。我们发现使用这个组件库可以将对象与对象间完全解耦,它不像命令模式那样,在Conc 阅读全文
posted @ 2019-05-05 17:45 wall-ee 阅读(764) 评论(0) 推荐(0) 编辑
摘要:C#设计模式之11:命令模式 命令模式 命令模式用来解决一些复杂业务逻辑的时候会很有用,比如,你的一个方法中到处充斥着if else 这种结构的时候,用命令模式来解决这种问题就会让事情变得简单很多。 命令模式是封装的一个全新的境界:把方法调用封装起来。通过封装方法调用,可以把运算快封装成形,所以调用 阅读全文
posted @ 2019-05-05 16:04 wall-ee 阅读(1666) 评论(0) 推荐(1) 编辑
摘要:状态模式 状态模式将合适的Context(上下文)模拟成一个状态机,在这个状态机的内部,由Context来决定整个状态机的状态,再根据不同的状态执行不同的方法。在C#编译器的帮助下,很多语法糖的背后都是一个状态机的实现,比如在一个返回IEnumerale或者IEnumeartor的方法中使用yiel 阅读全文
posted @ 2018-04-13 16:16 wall-ee 阅读(493) 评论(0) 推荐(0) 编辑
摘要:模板方法 模板方法是一个方法,定义了算法的步骤,并允许子类为一个或多个步骤提供实现。 本例中用冲泡咖啡和茶的例子来说明: 上图说明了冲泡咖啡和茶的步骤,可以看出冲泡咖啡和茶的步骤差不多,很相似,先来看看没有应用模板方法的代码: Tea的代码类似,就不放了。他们的一个不好的地方在于算法散落在了各个类中 阅读全文
posted @ 2018-04-09 11:33 wall-ee 阅读(301) 评论(0) 推荐(0) 编辑
摘要:外观模式 外观模式和适配器模式一样,都实现了接口改变,适配器模式是让一个接口转化成另外一个接口,而外观模式是让接口变得更简单。 先来看一下需求: 外观模式没有封装子系统的类,外观只是提供一个统一的接口,对子系统的类进行调度。如果有必要,还是可以直接操作子系统的类,而不是通过外观。外观让子系统的类使用 阅读全文
posted @ 2018-04-08 15:19 wall-ee 阅读(161) 评论(0) 推荐(0) 编辑
摘要:适配器模式 使用适配器模式的一个重要的点是首先要识别出什么代码(接口)是已经存在的,什么代码(接口)是新的,需要去适配的。适配器的作用是让旧的(现有的)接口能够匹配新的系统(要去适配的)。 比如有下面两个接口,一个是系统已经有的: public interface IDuck { void Quac 阅读全文
posted @ 2018-04-08 13:52 wall-ee 阅读(163) 评论(0) 推荐(0) 编辑
摘要:首先需要说明的是该系列的所有内容都是基于headfirst设计模式来描述的。因为我之前也看过不少关于设计模式的书,还是发现这本最好,因为这本书里面给出的例子是最贴切实际的。不说了,开始这个系列吧! 策略模式 设计原则①:找出应用中可能需要变化的地方,把他们独立出来,不要和那些不变的代码混合在一起。把 阅读全文
posted @ 2018-04-04 10:30 wall-ee 阅读(254) 评论(0) 推荐(0) 编辑
摘要:前面分析了简单工厂模式和工厂方法模式,接着来看一下抽象工厂模式,他与工厂方法模式有一些相似的地方,也有不同的地方。 先来看一个不用工厂方法模式实现的订购披萨的代码: 对象依赖的问题:当你直接实例化一个对象时,就是在依赖他的具体类。接着上面的例子,如果在一个PizzaStore里面直接创建很多对象时, 阅读全文
posted @ 2017-12-06 16:17 wall-ee 阅读(2700) 评论(0) 推荐(0) 编辑
摘要:工厂模式包含三种,简单工厂模式,工厂方法模式,抽象工厂模式。这三种都是解决了一个问题,那就是对象的创建问题。他们的职责就是将对象的创建和对象的使用分离开来。 当我们创建对象的时候,总是会new一个对象,有错么?技术上,new没有错,毕竟是C#的基础部分,真正的犯人是我们的老朋友“改变”。以及他是如何 阅读全文
posted @ 2017-12-05 11:53 wall-ee 阅读(13789) 评论(0) 推荐(1) 编辑
摘要:装饰者模式 背景是有一家星巴兹咖啡店,由于客源充足,所以决定重新设计他们的收费系统,以前的收费系统中只定义了一个表示饮料的Beverage的基类,它里面定义了一个Cost的方法用来计算饮料的花费,但是对于星巴兹来说他们的饮料的种类实在太多了,不能就每一种饮料就建立一个子类,类型爆炸! 所以要进行一番 阅读全文
posted @ 2017-12-04 19:53 wall-ee 阅读(675) 评论(0) 推荐(1) 编辑
摘要:C#中已经实现了观察者模式,那就是事件,事件封装了委托,使得委托的封装性更好,在类的内部定义事件,然后在客户端对事件进行注册: 可以说在C#中实现观察者模式是非常方便的。 观察者模式的定义:观察者模式定义了对象之间的一对多的依赖,这样一来,当一个对象改变状态时,他的所有依赖着都会收到通知并自动更新。 阅读全文
posted @ 2017-12-04 17:51 wall-ee 阅读(1389) 评论(0) 推荐(0) 编辑
摘要:在程序的设计过程中很多时候系统会要求对于某个类型在一个应用程序域中只出现一次,或者是因为性能的考虑,或者是由于逻辑的要求,总之是有这样的需求的存在,那在设计模式中正好有这么一种模式可以来满足这样的要求。 在C#中实现单例模式可以通过定义私有的构造函数来实现,当然,还可以通过定义静态的构造函数来实现。 阅读全文
posted @ 2017-11-30 20:48 wall-ee 阅读(479) 评论(0) 推荐(0) 编辑
摘要:合成复用原则又称为组合/聚合复用原则(Composition/Aggregate Reuse Principle, CARP),其定义如下: 合成复用原则(Composite Reuse Principle, CRP):尽量使用对象组合,而不是继承来达到复用的目的。 合成复用原则就是在一个新的对象里 阅读全文
posted @ 2017-11-30 16:05 wall-ee 阅读(411) 评论(0) 推荐(0) 编辑
摘要:GRASP 模式:每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。”这是关于模式最经典的定义,作者是建筑大师Christopher Alexander。如果是第一次看到这句话,多数人会觉得有些抽象难懂。其实“模式”两个字只是一个代号,就像我的英文名字叫Justin,如果 阅读全文
posted @ 2017-11-30 11:21 wall-ee 阅读(11071) 评论(0) 推荐(1) 编辑
摘要:简单概述一下23种设计模式 对于设计模式,在代码量多了之后,自然而然就会体会到设计模式的好处。 单例模式 确保某一个类只有一个实例,并且自行实例化并向整个系统提供这个实例。 优点:减少系统开销,避免对资源多重利用。 缺点:没有接口,不利于扩展。 工厂方法模式 定义一个用于创建对象的接口,让子类决定实 阅读全文
posted @ 2017-11-28 19:00 wall-ee 阅读(335) 评论(0) 推荐(0) 编辑
摘要:迪米特法则来自于1987年美国东北大学(Northeastern University)一个名为“Demeter”的研究项目。迪米特法则又称为最少知识原则(LeastKnowledge Principle, LKP),其定义如下: 迪米特法则(Law of Demeter, LoD):一个软件实体应 阅读全文
posted @ 2017-11-28 18:55 wall-ee 阅读(505) 评论(0) 推荐(0) 编辑
摘要:如果说开闭原则是面向对象设计的目标的话,那么依赖倒转原则就是面向对象设计的主要实现机制之一,它是系统抽象化的具体实现。依赖倒转原则是Robert C. Martin在1996年为“C++Reporter”所写的专栏Engineering Notebook的第三篇,后来加入到他在2002年出版的经典著 阅读全文
posted @ 2017-11-28 18:42 wall-ee 阅读(297) 评论(0) 推荐(0) 编辑
摘要:接口隔离原则定义如下: 接口隔离原则(Interface Segregation Principle, ISP):使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。 根据接口隔离原则,当一个接口太大时,我们需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相 阅读全文
posted @ 2017-11-28 18:39 wall-ee 阅读(212) 评论(0) 推荐(0) 编辑
摘要:里氏代换原则由2008年图灵奖得主、美国第一位计算机科学女博士Barbara Liskov教授和卡内基·梅隆大学Jeannette Wing教授于1994年提出。其严格表述如下:如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1代换o2时,程序P的行为没 阅读全文
posted @ 2017-11-28 18:36 wall-ee 阅读(345) 评论(0) 推荐(0) 编辑
摘要:开闭原则是面向对象的可复用设计的第一块基石,它是最重要的面向对象设计原则。开闭原则由Bertrand Meyer于1988年提出,其定义如下: 开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。 阅读全文
posted @ 2017-11-28 18:31 wall-ee 阅读(410) 评论(0) 推荐(0) 编辑