随笔分类 -  设计模式

摘要:如果不采用某种查询机制,则Repository将充斥着大量的检索方法。 public interface ICustomerRepository { IEnumerable<Customer> FindAll(); IEnumerable<Customer> FindAllVIPCustomers( 阅读全文
posted @ 2020-06-14 22:00 水墨晨诗 阅读(556) 评论(0) 推荐(0) 编辑
摘要:Identity Map(标识映射)模式:通过将所有已加载对象放在一个映射中确保所有对象只被加载一次,在引用这些对象时使用该映射来查找对象。 ①、在处理数据并发访问时,要有一种策略让多个用户共同影响同一个业务实体。 ②、单个用户在一个长运行事务或复杂事务中,始终使用业务实体的一致版本。 using 阅读全文
posted @ 2020-06-11 21:58 水墨晨诗 阅读(557) 评论(0) 推荐(0) 编辑
摘要:IAggregateRoot接口本身属于标记(market interface)接口模式。这个接口充当类和方法的元数据,那些与该类实例交互的代码在执行这些实例的工作之前检查是否存在该接口。 public interface IAggregateRoot{ }; IUnitOfWorkReposito 阅读全文
posted @ 2020-06-11 10:39 水墨晨诗 阅读(261) 评论(0) 推荐(0) 编辑
摘要:Layered Supertype(层超类型)模式定义了一个对象,改对象充当自己所在层的所有类型的基类,而且采用类继承机制实现。 意图:当某层中所有对象共享一组公共的业务逻辑时,可以使用Layered Supertype模式来移除重复的逻辑并将逻辑集中起来。 using System; using 阅读全文
posted @ 2020-06-07 21:53 水墨晨诗 阅读(177) 评论(0) 推荐(0) 编辑
摘要:Domain Model案例,项目结构图 ASPPatterns.Chap4.DomainModel.Model:Domain Model项目将包含应用程序内所有的业务逻辑。领域对象将存放在此处,并于其他对象建立关系,从而表示应用程序正在构建的银行领域。该项目还将以接口的形式为领域对象持久化和检索定 阅读全文
posted @ 2020-06-05 10:58 水墨晨诗 阅读(457) 评论(0) 推荐(0) 编辑
摘要:S.O.L.I.D: 单一责任原则(SRP):它要求每个对象只应该为一个元素而改变而且只有一个职责关注点。遵循这个原则,就可以避免单体类(软件领域的瑞士军刀,能解决很多问题)设计问题。使每个类均保持简介,就可以提升系统的可读性和可维护性。 开放封闭原则(OCP):对拓展开发,对修改封闭,这样就能够在 阅读全文
posted @ 2020-06-05 10:25 水墨晨诗 阅读(244) 评论(0) 推荐(0) 编辑
摘要:责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链条,并沿着这条链条传递该请求,直到有一个对象处理它为止。 //定义一个处理请示的接口 abstract class Handler { protected Handler successor; p 阅读全文
posted @ 2019-11-07 09:03 水墨晨诗 阅读(144) 评论(0) 推荐(0) 编辑
摘要:策略模式(Strategy):定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的用户。 //策略类,定义所有支持的算法的公共接口 public abstract class Strategy { //算法方法。 public abstract void A 阅读全文
posted @ 2019-11-06 16:00 水墨晨诗 阅读(379) 评论(0) 推荐(0) 编辑
摘要:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态了。 将要保存的细节封装在Memento中,哪天要更改保存的细节也不影响客户端。Memento模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属 阅读全文
posted @ 2019-11-06 14:18 水墨晨诗 阅读(157) 评论(0) 推荐(0) 编辑
摘要:将一个系统分割成多个对象可以增加复用性,但是对象之间相互连接的激增又会降低其可复用性。 大量的连接使得一个对象不可能在没有其他对象的支持下工作,系统表现为一个不可分割的的整体。所以,对系统的行为进行任何较大的改动就十分困难。 中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各个不需要显式地 阅读全文
posted @ 2019-10-31 14:43 水墨晨诗 阅读(191) 评论(0) 推荐(0) 编辑
摘要:状态模式(State)主要是解决当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。(如果状态判断很简单,就没必要使用状态模式了。) 将特定的状态相关的行为都放入到一个对象中,由于所有与状态相关的代码都存在于某个Concre 阅读全文
posted @ 2019-10-30 14:00 水墨晨诗 阅读(378) 评论(0) 推荐(0) 编辑
摘要:观察者模式:解决一个对象的某个事件在发生后,触发一系列其他对象的动作。并且不希望对象之间存在紧密的依赖关系。 static void Main(string[] args) { Chicken ck = new Chicken(); ck.Woo();//没使用观察者模式的方法。 } public 阅读全文
posted @ 2019-10-30 11:38 水墨晨诗 阅读(160) 评论(0) 推荐(0) 编辑
摘要:在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪一个,我们只需在程序运行时指定具体的接收者即可,此时可以使用命令模式,来进行设计。命令模式使得请求发送者与请求者消除彼此之间的耦合,让对象之间的调用关系更加灵活,实现解耦。在命令模式中,会将一个请求封 阅读全文
posted @ 2019-10-29 22:17 水墨晨诗 阅读(119) 评论(0) 推荐(0) 编辑
摘要:1、外观模式对外屏蔽了子系统的细节,因此外观模式降低了客户端对子系统使用的复杂性。 2、外观模式对客户端与子系统的耦合关系,让子系统内部的模块更容易维护和拓展。 3、通过合理的使用外观模式,可以帮我们更好的划分访问的层次。 4、当系统需要进行分层设计时,可以考虑使用Facade模式。 5、在维护一个 阅读全文
posted @ 2019-10-06 11:33 水墨晨诗 阅读(356) 评论(1) 推荐(0) 编辑
摘要:在模板方法模式(Template Method)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。 介绍 意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法 阅读全文
posted @ 2019-10-05 17:02 水墨晨诗 阅读(121) 评论(0) 推荐(0) 编辑
摘要:在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。 意图:为其他对象提供一种代理以控制对这个对象的访问。 主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的 阅读全文
posted @ 2019-10-05 16:57 水墨晨诗 阅读(211) 评论(0) 推荐(0) 编辑
摘要:享元模式 享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。 意图:运用共享技术有效地支持大量细粒度的对象。 主要解决:在有大量对象时,有可能会造成内存溢出,我们 阅读全文
posted @ 2019-10-02 21:42 水墨晨诗 阅读(125) 评论(0) 推荐(0) 编辑
摘要:组合模式又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构以表示“整体-部分”的层次关系。 组合模式依据树形结构来组合对象,用来表示部分以及整体的层次。 组合模式使得用户对单个对象和组合对象的访问具有一致性,即:组合能让客户以一致的方式处理个别对象以及组合对象。 阅读全文
posted @ 2019-09-27 16:00 水墨晨诗 阅读(160) 评论(0) 推荐(0) 编辑
摘要:装饰器模式(Decorator):可以在程序运行中,为对象动态的增加功能(不修改业务类,可以随意的添加功能,还可以随意调整顺序)。(组合+继承。两种方式的结合) static void Main(string[] args) { AbstractStudent student = new Commo 阅读全文
posted @ 2019-09-27 15:41 水墨晨诗 阅读(248) 评论(0) 推荐(0) 编辑
摘要:对象的继承关系是在编译的时候就定义好的,所以无法在运行时改变从父类集成的实现。子类的实现与它的父类有非常紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化。当你需要复用子类的时候,如果继承下来的实现并不适合解决新的问题,则父类必须重写或被其他更适合的类替换。这种依赖关系限制了灵活性并最 阅读全文
posted @ 2019-09-26 17:00 水墨晨诗 阅读(147) 评论(1) 推荐(0) 编辑

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