设计模式
文章平均质量分 55
Alden
这个作者很懒,什么都没留下…
展开
-
创建模式-生成器模式
生成器模式(Builder)将一个复杂对象的创建与表示分离开,对其复杂的创建过程和部件进行解耦,使同样的创建过程可以创建不同的表示. 如果当你的对象的创建过程可以和每个部件的创建过程分离开,并且可能通过组装不同的创建部件可以生成不同的对象. 如同生成一个汽车,你可以通过不同的组装方式来创建一个不同类型的汽车. publicinterfaceIBuilder { void BuildEngine(); // 发动机原创 2010-06-26 17:50:00 · 291 阅读 · 0 评论 -
行为模式-解释器模式
<br />解释器模式(Interpreter) 用于定义语言的文法,建立一个解释器来解释该语言的句子. 它描述了一个语言解释器是如何构成的.<br />当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式.例如:<br /> publicclassContext<br /> {<br /> } // class Context<br /> publicinterfaceIExpression<br /> {<br />原创 2010-07-11 23:15:00 · 261 阅读 · 0 评论 -
行为模式-迭代器模式
<br /> 迭代器模式(Iterator) 提供一个方法用于顺序访问一个集合中的各个元素,而不需要暴露该集合的内部表示.<br /> 集合对象拥有两个最基本的功能,即存储数据和遍历集合中的每一个数据.迭代器模式为遍历不同的集合结构提供一个统一的接口,从而支持同样的算法在不同的集合结构上进行操作.<br /> .NET中提供了两个接口,分别为IEnuerable和IEnumator,这就为实现迭代器提供了极大的便利.原创 2010-07-12 23:48:00 · 264 阅读 · 0 评论 -
行为模式-命令模式
<br /> 命令模式(Command)将一个请求封装为对象,从而使你可用不同的请求对客户进行参数.对请求排队或者记录日志,以及支持可撤销的操作.也就是说将功能封装成对象.对象的激发者和接收者都不需要了解命令的执行过程.从而消除了激发者和接收者之间的耦合.为程序提供了更清晰的结构.实际运用中通过将系统的命令封抽象成一个接口所有的命令都是这个接口的实现.<br /> 为了给命令模式一个整洁清晰的结构,命令模式通常和工厂模式一起使用.采用一个工厂对命令对象的建立进行管理,减少命令原创 2010-07-10 00:11:00 · 488 阅读 · 0 评论 -
行为模式-观察者模式
<br /> 观察者模式(Observer) 定义对象间的一对多个关系,当一个对象的状态发生变化时,所以依赖它的对象都会得到通知,并自动更新.<br /> 观察者模式完美的将观察者和被观察的对象分离开,举个例子:用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上.面向对象设计的一个原则是:系统中的每个类将重点放在某一个功能上,而不是其他方面.一个对象只做一件事情,并且将他做好.观察者模式在模块之间划定了清晰的界限,提高了原创 2010-07-14 23:45:00 · 371 阅读 · 0 评论 -
行为模式-模板模式
<br />模板模式(Template)是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要.所以模板模式可以理解为定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中.模板使得子类可以不改变一个算法的结构即可重定义该算法的某些特定处理步骤.<br />变化一直以来都是软件设计的永恒话题,在XP(极限编程)编程中提倡拥抱变化,积极应对.如何更好的去抓住变化点,应对变化,如何更好的提高代码复用,通过学习模板模式,您应该有一个新的认识.<br /> publicabstract原创 2010-07-16 22:35:00 · 352 阅读 · 0 评论 -
行为模式-备忘模式
<br /> 备忘模式(Memento)在不破坏封装性的前提下,捕捉一个对象的内部状态,并在对象之外保存这个状态,这样以后就可以将这个对方恢复到保存的状态.可以使用序列化将保存的状态类序列化为本地文件,这样可以持久化保存当前状态.如果用`一个接口来让其它对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性.<br /> publicclassTarget<br /> {<br /> publicint Number;<br /> <br />原创 2010-07-13 23:37:00 · 272 阅读 · 0 评论 -
行为模式-状态模式
<br /> 状态模式(State)在实际应用中使用的比较多,一般用于”状态的切换”,因为我们经常会使用if else进行状态切换.如果针对状态的这样判断切换反复出现,我们就要联想到是否可以采取状态模式了.<br /> 不只是根据状态,也可以根据属性.如果某个对象的属性不同,对象的行为就不一样,这点在数据库系统中出现的频率比较高,我们经常会在一个数据表的尾部,加上一个属性含义的字段,用以标识记录中一些特殊性质的记录,这种属性的改变又是随时可能发生的,就有可能要使用状态模式.<原创 2010-07-15 00:12:00 · 457 阅读 · 0 评论 -
行为模式-访问者模式
<br />访问者模式(Visitor)表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作.<br />可以这么理解,访问者模式实际上是分离了容器结构中的元素和对这些元素进行操作的行为,然而容器对象就象是个大染缸,本来有各种鲜明类型的对象一旦放入后,再取出时,这些类型就消失了,这时我们就可以使用访问者模式来加以处理.<br /> publicinterfaceIVisitor<br /> {<br /> void Process原创 2010-07-17 11:52:00 · 389 阅读 · 0 评论 -
行为模式-中介者模式
<br /> 中介者模式(Mediator) 使用一个中介对象来封装一系列对象的交互行为,中介者模式可使各个对象之间不需要显示的引用,降低耦合度,并且可以独立改变之间的交互.<br /> 各个对象之间的交互操作非常多;每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉及到修改很多其他对象的行为,如果使用中介者模式,可以使各个对象间的耦合松散,只需关心和中介者的关系,使多对多的关系变成了一对多的关系,可以降低系统的复杂性,提高可扩展性.<br /> publi原创 2010-07-13 00:25:00 · 401 阅读 · 0 评论 -
行为模式-职责链模式
<br /> 职责链模式(Chain of Responsibility)使多个对象都有机会处理请求,避免请求的发送者和接收者之间的耦合关系,将这些对象链成一个链,沿着这条链传递请求,直到有对象能够处理请求为止。<br /> 无法预测请求处于那种类型每一个类碰到其不能处理的请求就放弃处理,从而降低了耦合性,但也带来的效率的损耗。<br /> publicclassRequest<br /> {<br /> publicint Type { get;原创 2010-07-09 00:30:00 · 323 阅读 · 0 评论 -
结构性模式-享元模式
<br /> 享元模式(Flyweight)通过共享一个元类,解决避免大量相同内容的小类而引起的系统开销.面向对象的原则是一切都是对象,但如果真的这样使用起来,那对象可能多的吓人.例如字处理软件,如果把每一个字都看成一个对象.无疑会消耗大量的内存.这时可以通过设计一个元类,封装可共享的类,另外还有一些特性取决于应用,是不可共享的.这也是享元模式中内部状态和外部状态要解决的问题.<br /> 可以先做一个原始模型,根据不同的场合和环境,再产生具体的模型.很显然,在这里需要产生不原创 2010-07-06 23:49:00 · 294 阅读 · 0 评论 -
创建模式-工厂模式
<br />简单工厂模式又叫静态工程模式,它主要是使用一个工厂类根据传入的参数来创建一个继承于同一个基类的多个不同子类的实例。<br />假如你需要编写一个数据访问模块,用于支持对Sql Server、Oracle等多种数据库的支持,就可以考虑使用工厂模式来完成,例如:<br /> publicinterfaceIDataAccess<br /> {<br /> int ExecuteNonQuery(string sql);<br /> } // interface I原创 2010-06-26 11:58:00 · 431 阅读 · 0 评论 -
创建模式-原型模式以及单态模式
<br /> 原型模式(Proto)是创建一个对象,并通过拷贝这个对象来创建新的对象。<br /> 浅拷贝复制对象的基本类型,对对象类型不进行拷贝,只是产生引用。<br /> 深拷贝复制对象的基本类型,以及对象类型。<br /> .NET提供了MemberWiseClone方法以及ICloneable接口用于实现浅拷贝以及深拷贝,例如:<br /> publicclassPerson<br /> {<br /> pub原创 2010-06-27 15:19:00 · 224 阅读 · 0 评论 -
结构性模式-适配器模式
<br />适配器模式(Adapter)主要是用于将一个类的接口转化为使用者希望的另一个接口.使原本因为接口不兼容而不能一起工作的类可以一起工作.<br /> 在软件开发过程中经常会遇到这类问题,在新的项目中使用现有的一些组件,而这些组件的接口与新的项目的接口不一致,如何使用现有的运行良好的代码,而又能满足新项目的接口规范.这就可以通过适配器模式来实现,例如:<br /> publicclassOldClass<br /> {<br /> publicstring原创 2010-06-29 01:00:00 · 237 阅读 · 0 评论 -
结构性模式-组合模式
<br /> 组合模式(Composite)将对象组织成树状结构,以表示整体-部分的层次结构.使单个对象和组合对象的操作具有一致性.例如:<br /> publicinterfaceIComposite<br /> {<br /> int Id { get; set; }<br /> string Name { get; set; }<br /> <br /> void Add(IComposite source);<br原创 2010-07-01 01:36:00 · 292 阅读 · 0 评论 -
结构性模式-桥接模式
<br />桥接模式(Bridge)用于将抽象部分和实现部分分离开来,使其相互独立,可以各自变化,又可以动态的进行组合.<br /> 例如:人分为男人、女人, 其又有行为吃饭、睡觉等,如何将其通过某种方式动态绑定,而不是固定的进行绑定,就可以使用桥接模式,如: <br /> publicinterfaceIPerson<br /> {<br /> string Query();<br /> } // interface IPerson<br /> p原创 2010-06-30 01:40:00 · 260 阅读 · 0 评论 -
结构性模式-装饰模式
装饰模式(Decorator)用于给动态给对象添加一些额外的职责.例如你的一个方法用于向文件中写入数据,那么你希望添加一些功能在这个方法上,例如在写前打开文件,写后关闭文件,例如: publicinterfaceILog { void Write(); } // interface ILog publicclassFileLog : ILog { publicvoid Write() { //原创 2010-07-01 23:40:00 · 315 阅读 · 0 评论 -
结构性模式-代理模式
<br /> 代理模式(Proxy)是通过给一个对象提供一个代理,由代理对象控制对原对象的引用.如果由于一些原因,一个对象不能或者不想直接引用另一个对象.这时可以通过一个代理对象建立在客户端对象和目标对象之间的引用关系.例如:<br /> publicclassProcess<br /> {<br /> publicvoid Add()<br /> {<br /> }<br /> }<br /> publicclassProx原创 2010-07-07 23:48:00 · 254 阅读 · 0 评论 -
结构性模式-外观模式
<br /> 外观模式(Facade)主要是为系统中的一组接口提供一个统一的界面,通过定义这样一个高层的接口使系统的使用更加容易,外观模式重在于思想.例如在应用程序中如果用到访问数据库,那么当用户从SQL Server数据库切换到Oracle数据库时,如果没有提供统一的数据库访问接口,这时可能需要进行大量的代码修改.或者维护多个组件的版本.通过使用统一的接口,切换数据库时只需要修改相关的配置参数,不需要任何多余的修改.例如:<br /> publicclassFacade<br />原创 2010-07-06 00:40:00 · 285 阅读 · 0 评论 -
行为模式-策略模式
策略模式(Strategy)面向接口编程是面向对象编程中一个最重要的原则,根据封装的原理,我们常常将易于变化的部分进行抽象,定义为接口.对于调用者而言,只需要知道接口的外部定义即可,具体的实现则不用理会.在设计模式中,策略模式就是这样的一个面向接口编程的最佳体现,它进行抽象的原创 2010-07-16 00:18:00 · 275 阅读 · 0 评论