
设计模式
文章平均质量分 72
逆風的薔薇
这个作者很懒,什么都没留下…
展开
-
代理模式(Proxy)案例
场景:参加家长会 描述:孩子学校组织家长会,做为家长的我们没有时间,正好媳妇她姐有空,所以由她代替我们去参加家长会 代理,说到底是一个代理,最大程度上能执行被代理的最大能力。在一定程度上与被代理者执行力相同。 (一)参加家长会要做的事 /// /// 执行三个动作:去学校,开会,回家 /// public in转载 2013-01-27 20:56:41 · 1304 阅读 · 0 评论 -
单例模式(Singleton)
单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。 通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。 单例模式(Singleton)UML类图: 分析: Singleton原创 2013-02-06 19:43:59 · 5066 阅读 · 1 评论 -
职责链模式(Chain Of Responsibility)
职责链模式(Chain Of Responsibility),使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 这里发出这个请求的客户端并不知道这当中的哪一个对象最终处理该请求,这样系统的更改可以在不影响客户端的情况下动态的重新组织和分配责任。 职责链模式UML类图:原创 2013-02-07 19:39:29 · 1292 阅读 · 0 评论 -
中介者模式(Mediator)
中介者模式(Mediator),用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互。 中介者模式UML类图: 由上图可以看出:Mediator 抽象中介者类,定义了同事对象到中介者对象的接口;Colleague抽象同事类;ConcreteMediator具体中介者类,实现抽象类的方法,它需要知道所有的具原创 2013-02-07 20:15:25 · 2638 阅读 · 0 评论 -
解释器模式(Interpreter)
解释器模式(Interpreter),给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 解释器模式需要解决的问题是,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。 解释器模式UML类图: 如上图所原创 2013-02-15 17:08:01 · 1344 阅读 · 0 评论 -
装饰模式(Decorator)
装饰模式(Decorator):动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。 其中Component定义了一个对象接口,可以给这些对象动态的添加职责;ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加一些职责;Decorator装饰抽象类,继承自Component,从外类来扩展Component的功能,但对于C原创 2013-01-26 14:47:40 · 784 阅读 · 0 评论 -
论设计模式在软件开发中的应用
论设计模式在软件开发中的应用 在解决这个论题之前,我们首先要了解设计模式的概念,及其基本的分类。 “设计模式”这四个字,相信大家在很多地方都会看到,什么是设计模式呢? 一个设计模式提供一种提炼子系统或软件系统中的组件的,或者它们之间的关系的纲要设计。设计模式描述普遍存在的在相互通讯的组件中重复出现的结构,这种结构解决在一定的背景中的具有一般性的设计问题。转载 2013-02-15 17:37:06 · 1804 阅读 · 0 评论 -
策略模式(Strategy)
今天研究了一下策略模式,策略模式(Strategy)定义了一个算法家族,对每个算法分别封装成为一个单独的类,让他们之间可以相互的替换,此模式让算法的变化不会影响到使用算法的客户,可以减少了各种算法类与使用算法类之间的耦合。策略模式包含Strategy、context两个模块,Strategy为Context定义可一系列可供重用的算法或行为,继承有助于析取出这些算法中的公用功能。 策原创 2013-01-25 19:48:08 · 787 阅读 · 0 评论 -
工厂方法模式(Factory Method)
工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。 工厂方法模式实现时,客户端需要决定实例化哪一个工厂,决定创建哪一个类的对象,也就是说,工厂方法模式把简单工厂的内部逻辑判断移到了客户端代码来进行,本来是要改工厂类的,而现在是修改客户端。总体来说,工厂方法模式修正了简单工厂中不遵循的开放-原创 2013-01-28 14:53:26 · 3445 阅读 · 2 评论 -
访问者模式(Visitor)
访问者模式(Visitor),表示一个作用于某对象结构中各元素的操作,它使你可以不改变各元素的类的前提下定义作用于这些元素的新操作。 访问者模式适合于数据结构相对稳定的系统。它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由的演化。 访问者模式的目的是要把处理从数据结构分离出来,很多系统可以按照算法和数据结构分开,如果这样的系统有比较稳定的数原创 2013-02-16 19:04:36 · 1555 阅读 · 0 评论 -
代理模式(Proxy)
代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 一般来说分为4种:(1)远程代理,也就是为一个对象在不同的地址空间提供局部代表,这样就可以隐藏一个对象存在于不同地址空间的事实。(2)虚拟代理,是根据需要创建需求很大的对象,通过它来存放实例化需要很长时间的真实对象。这样就可以达到性能的最优化,比如说你打开一个很大的HTML网页时,里面可能有很多的文字和图片,但是你还原创 2013-01-27 19:55:21 · 3456 阅读 · 0 评论 -
原型模式(ProtoType)
原型模式(ProtoType):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。字面理解其意思就是从一个对象创建另外一个可定制的对象,而无需知道任何创建的细节,并能提高创建的性能,说白了就是copy技术,把一个对象完整的copy出一份。 原型模式UML类图: 实现克隆方法时,调用了.NET中封装的方法MemberwiseClone()方法,该原创 2013-01-28 17:07:45 · 1267 阅读 · 0 评论 -
命令模式(Command)
命令模式(Command),将一个请求封装成一个对象,从而使你可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 命令模式UML类图: 如上图所示:Command类是用来声明执行操作的接口;ConcreteCommand类,将一个接收者对象绑定于一个动作,调用接收者相应的操作,以实现Execute;Receiver类,知道如何实施与执行一个原创 2013-02-07 19:16:11 · 2528 阅读 · 0 评论 -
桥接模式(Bridge)
桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都可以独立地变化。对于模式中描述的抽象与它实现分离,这并不是说,让抽象类与派生类分离,因为这没有任何意义。实现指的是抽象类和它的派生类用来实现自己的对象。 桥接模式(Bridge)UML类图: 桥接模式(Bridge)实现: using System; using System.Collections.Generic;原创 2013-02-06 21:09:10 · 3532 阅读 · 0 评论 -
简单工厂设计模式(OperationFactory)
今天学习了简单工厂设计模式(OperationFactory),随笔写写自己的理解,便于学以致用。 简单工厂设计模式中,工厂类是核心,是与外界直接交互的接口,包含了必要的逻辑判断,根据外界操作决定应该创建哪一个操作(Operation)类的对象。在简单工厂设计模式中,秉承减少冗余代码的原则,将所有操作抽象成一个独立的父类,父类中包含着所有操作需要的共有属性和方法。对于每一个独立的操作通过继原创 2013-01-24 17:42:12 · 1859 阅读 · 1 评论 -
模板方法模式(TemplateMethod)
模板方法模式(TemplateMethod):定义一个操作中的算法的骨架,而将一些步骤延迟到子类。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 UML类图: TemplateClass是抽象类,其实也就是一个抽象模板,定义并实现一个模板方法,这个模板方法一般是一个具体的方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象原创 2013-01-29 13:23:57 · 1114 阅读 · 0 评论 -
建造者模式(Builder)
建造者模式(Builder),将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。 如果需要将一个复杂对象的构建和他的表示分离,使得同样的构建过程可以创建不同的表示,此时适合使用建造者模式,使用了建造者模式,用户只需要指定建造的类型就可以得到他们,而具体建造的过程和细节就不需要知道了。 建造者模式UML类图: 如上图原创 2013-02-03 19:58:22 · 1307 阅读 · 0 评论 -
外观模式(Facade)
外观模式(Facade),为子系统中的一组接口提供一个一直的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 外观模式UML类图: 如上图所示为外观模式结构图,其中Facade类即外观类,它需要了解所有的子系统的方法或属性,进行组合以备外界调用,它知道哪些子系统类负责处理请求,将客户的请求代理给适当的子系统对象。SubSystem c原创 2013-02-03 19:59:53 · 1263 阅读 · 0 评论 -
状态模式(State)
状态模式(State),当一个对象的内在状态改变时,允许改变其行为,这个对象看起来好像改变了其类。状态模式主要解决的是当控制一个对象的状态转换条件表达式过于复杂时的情况。把状态的判断逻辑转移到不同状态的一系列类中,可以把复杂的判断逻辑简化。 状态模式UML类图: 分析:由上图可知(1)State类,抽象状态类,定义一个接口以封装与Context的一个特定状态相关的行为;(原创 2013-02-04 13:53:10 · 6642 阅读 · 2 评论 -
备忘录模式(Memento)
备忘录模式(Memento),在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样就可以将该对象状态恢复到原先保存的状态。 备忘录模式UML类图: 由上图可知,Originator(发起人)类:负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态,Originator可根据需要决定Memento存储Ori原创 2013-02-05 16:23:39 · 1376 阅读 · 0 评论 -
组合模式(Composite)
组合模式(Composite),将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 组合模式UML类图: 由上图可知,Component:为组合中的对象声明接口,在适当情况下,实现所有类共有接口的 默认行为。声明一个接口用于访问和管理Component的子类。 Leaf:在组合中表示叶节点对象,叶节点原创 2013-02-05 19:10:10 · 2215 阅读 · 0 评论 -
观察者模式(Observer)
观察者模式(Observer):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 UML类图: 分析: Observer类,抽象观察者,为所有的具体观察者定义一个接口,在得到主题的通知时,更新自己这个接口叫做更新接口。抽象观察者一般用一个抽象类或者一原创 2013-02-04 12:31:26 · 1685 阅读 · 1 评论 -
适配器模式(Adepter)
适配器模式(Adepter),将一个类的接口转换成客户希望的另外一个接口。Adepter模式使得原本由于模式不兼容而不能一起工作的那些类,可以一起工作。 在软件开发中,当系统的数据和行为都正确,但接口不符时,我们应该考虑用适配器模式,目的是使控制范围之外的一个原有对象与某个接口匹配,适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境不一致的情况,比如要在需要对早起代码复用原创 2013-02-04 15:05:49 · 1941 阅读 · 0 评论 -
迭代器模式(Iterator)
迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。 当你需要访问一个聚合对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑使用迭代器模式。另外,当需要对聚集有多种方式遍历时,可以考虑去使用迭代器模式。迭代器模式为遍历不同的聚集结构提供如开始、下一个、是否结束、当前哪一项等统一的接口。 迭代器模式UML类图:原创 2013-02-06 14:19:24 · 21020 阅读 · 3 评论 -
享元模式(FlyWeight)
享元模式(FlyWeight),运用共享技术有效的支持大量细粒度的对象。也就是说当项目中需要应用大量相同或相似的功能代码时,那么对于硬盘、内存、CPU、数据库空间的等服务器资源均可达到共享,以减少服务器资源,提高利用率。 享元模式UML类图: 如上图所示,FlyWeight类,它是所有具体享元类的超类或者接口,通过这个接口,FlyWeight可以接受并作用于原创 2013-02-10 13:16:56 · 2081 阅读 · 0 评论 -
C++实现单例模式
单例模式 单例模式,可以说设计模式中最常应用的一种模式了,据说也是面试官最喜欢的题目。但是如果没有学过设计模式的人,可能不会想到要去应用单例模式,面对单例模式适用的情况,可能会优先考虑使用全局或者静态变量的方式,这样比较简单,也是没学过设计模式的人所能想到的最简单的方式了。 一般情况下,我们建立的一些类是属于工具性质的,基本不用存储太多的跟自身有关的数据,在这种情况下,每次都去new一转载 2016-09-23 21:22:23 · 987 阅读 · 0 评论