Web Analytics
yangyang

码农兼一个普普通通小青年

Design Patterns


从Undo,Redo谈命令模式

一般的应用软件中,通常会提供Redo和Undo的操作,比如Paint.NET中的动作面板,Word中的撤销重做,一般我们按Ctrl-Z即可回退到上次操作。 要实现上面的这一功能,最直观的想法就是,我们需要把执行的命令以及相应的参数记录下来,一个命令或者动作,我们可以想象成一个对象,将这些的命令以对象的方式放到一个Stack里面,然后Undo的时候,Pop出来,然后执行该命令即可返回之前的状态。 将命令或者操作抽象为一个对象,使得可以用不同的请求参数对对象进行初始化,使得可以对命令进行排队处理,记录请求,以及执行Undo和Redo操作,这就是命令模式(Command Pattern),命令模式最大的优点就是,他将对象方法的调用和实现分离开。 为了说明如何实现Undo和Redo,我们尝试做一个简单的文本格式化的小工具,就是能够进行加粗,倾斜,加下划线,然后支持重做和撤销操作。 首 …

Command Pattern .NET

从循环引用谈依赖倒置原则

在业务开发中,通常会按照业务或者逻辑将项目分成好几个工程文件以方便重用和模块化,有时候我们分开的两个项目可能存在相互引用的情况,举个例子,比如有两个系统,订单系统和产品系统,订单系统需要从产品系统中了解当前产品是否有剩余。产品系统需要从订单系统中了解产品的销售情况,这时候就存在相互引用的情况。 循环引用在Visual Studio中是编译不通过的。出现循环引用很可能是设计上抽象不够导致的,根据设计模式的依赖倒置-高层模块不应该依赖于低层模块。二者都应该依赖于抽象,抽象不应该依赖于细节,细节应该依赖于抽象这一原则,可以来解决循环引用。 在一些项目中,使用一些依赖注入的框架如SPRING.net,CASTLE可以在一定程度上避免循环引用。 Class A中用到了Class B的对象b,一般情况下,需要在A的代码中显式的new一个B的对象。采用依赖注入技术之后,A的代码只需 …


浅谈模板方法模式

在很多时候,我们在写代码的时候总是会遇到一些相同或者类似的处理流程和步骤,就拿一般的函数编写来说,在处理之前一般会进行参数有效性验证,然后可能会对参数进行预处理,最后在执行业务操作。 这种情况通常会出现在一类业务,比如订单处理系统中,就有订单创建,订单修改等操作,就会出现的这些类似的情况。 如果每个都这样写的话,会发现整个流程比较重复和冗余。比如: class SomeProcessService { ResponseBody SomeProcess (RequestBody request) { ValidateParameter(); PreprocessingParameter(); DoSomething(); } } class …

template method Design Pattern