文章分类 -  设计模式

设计模式总结
摘要:Simple Factory Pattern(简单工厂模式) 优势和缺陷 在简单工厂模式中,工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面中摆脱出来,仅仅需要负责“消费”对象就可以了,而不必管这些对象究竟是如何创建以及如何组织的。这样就明确区分了各自的职责和权力,有利于整个软件体系结构的优化。 不过,凡事有利就有弊,简单工厂模式的缺点也正体现在其工厂类上。由于工厂类集中了所有实例的创建逻辑,很容易违反GRASPR的高内聚的责任分配原则。将全部创建逻辑都集中到一个工厂类还有另.. 阅读全文

posted @ 2011-12-13 23:53 tLEE 阅读(6585) 评论(0) 推荐(0)

二十六.行为型设计模式——Visitor Pattern(访问者模式)
摘要:定义 说明一个操作执行于一个对象结构的成员(elements)中。访问者样式让你定义一个类的新操作而无须改变它操作的这些成员类。 UML类图如下: 其中类和对象的关系为: 1.Visitor(抽象访问者):为对象结构类中每一个ConcreteElement的类声明一个Visit操作。这个操作的名称及标志(signature)识别传出Visit请求给访问者的类。这就使得访问者可以解定正要被访问的元素的具体类,这样访问者就可以直接经由其特有接口访问到元素(Element)。 2.ConcreteVisitor(具体访问者):实现每个由Visitor声明的操作。每个操作实现本算法的一部... 阅读全文

posted @ 2011-12-13 23:28 tLEE 阅读(552) 评论(0) 推荐(0)

二十五.行为型设计模式——Template Method Pattern(模版方法模式)
摘要:定义 定义一个操作中算法的骨架(skeleton),以将一些步骤延缓到子类中实现。模版方法让子类重新定义一个算法的某些步骤而无须改变算法的结构。 UML类图如下: 其中类和对象关系为: 1.AbstractClass(抽象类):定义一个抽象原始的操作,其子类可以重定义它实现一个算法的各个步骤;实现一个模版方法定义一个算法的骨架,此模版方法不仅可以调用原始的操作,还可以调用定义于AbstractClass中的方法或其他对象中的方法。 2.ConcreteClass(具体子类):实现原始的操作以完成子类特定算法的步骤。 典型应用的顺序图如下: 实例1——数据库连接模版 下面的代... 阅读全文

posted @ 2011-12-12 23:53 tLEE 阅读(340) 评论(0) 推荐(0)

二十四.行为型设计模式——Strategy Pattern(策略模式)
摘要:定义 定义一系列算法(algorithms family),将每一个算法封装起来,并让它们可以互相替换(interchangeable)。策略模式让算法独立于使用它的客户而变化。 UML类图如下: 其中类和对象的关系为: 1.Strategy(抽象策略类):定义一个公共的接口给所有支持的算法。Context使用这个接口调用ContextStrategy定义的算法。 2.ContextStrategy(具体策略类):调用Strategy接口实现具体的算法。 3.Context(场景):用ContextStrategy对象配置其执行的环境;维护一个对Strategy的引用实例;可以... 阅读全文

posted @ 2011-12-12 23:00 tLEE 阅读(485) 评论(0) 推荐(0)

二十三.行为型设计模式——State Pattern(状态模式)
摘要:定义 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 UML类图如下: 其中类和对象的关系为: 1.Context(情景类):定义客户应用程序有兴趣的接口;维护一个ConcreteState(具体状态)子类的实例对象。 2.State(抽象状态类):定义一个接口以封装与Context的一个特别状态(State)相关的行为。 3.ConcreteState(具体状态类):每一个具体状态类(ConcreteState)实现了一个Context的状态(state)相关的行为。 典型应用的顺序图如下: 实例1——账户分类: 允许账户因它的余额... 阅读全文

posted @ 2011-11-22 00:09 tLEE 阅读(536) 评论(0) 推荐(0)

二十二.行为型设计模式——Observer Pattern(观察者模式)
摘要:定义: 定义对象间的一种一对多依赖关系,使得每当一个对象改变状态,则其相关依赖对象皆得到通知并被自动更新。 UML类图如下: 其中类和对象的关系为: 1.Subject(被观察对象):了解其多个观察者,任意数量的观察者可以观察一个对象;提供一个接口用来缚定(attaching)及分离(detaching)观察者对象。 2.ConcreteSubject(具体被观察对象):储存具体观察者(ConcreteObserver)有兴趣的状态;当其状态改变时发送一个通知给其所有的观察者对象。 3.Observer(观察者):定义一个更新(updating)接口,在一个被观察对象改变时应被... 阅读全文

posted @ 2011-09-27 23:13 tLEE 阅读(1249) 评论(0) 推荐(0)

二十一.行为型设计模式——Memento Pattern(备忘录模式)
摘要:定义: 在不破坏封装的前提下,捕获并且保存一个对象的内部状态,这样可以将对象恢复到原先保存的状态。 UML类图如下: 其中类和对象的关系为: 1.Memento(备忘录):保持Originator(原发器)的内部状态,根据原发器来决定保存哪些内部的状态;保护原发器之处的对象访问备忘录,备忘录可以有效地利用两个接口,看管者只能调用狭窄(功能有限)的接口——它只能传递备忘录给其他对象,而原发器可以调用一个宽阔(功能强大)的接口,通过这个接口可以访问所有需要的数据,使原发器可以返回先前的状态,理想的情况是,只允许生成本备忘录的那个原发器访问本备忘录的内部状态。 2.Originat... 阅读全文

posted @ 2011-09-26 23:38 tLEE 阅读(408) 评论(0) 推荐(0)

二十.行为型设计模式——Mediator Pattern(中介者模式)
摘要:定义 定义一个对象封装一系列多个对象如何互相作用。Mediator中介者使得对象之间不需要显示地互相引用,从而使得其耦合更加松散。并且还让我们可以独立变化多个对象的互相作用。 UML类图如下: 其中类和对象的关系为: 1.Mediator(抽象中介者):定义一个接口用于与各同事对象(Colleague)之间的通信。 2.ConcreteMediator(具体中介者):协调各个同事对象实现协作的行为;掌握并且维护它的各个同事对象引用。 3.Colleague(同事类):每一个同事对象都引用一个中介者对象;每一个同事对象在需要和其他同事对象通信时,就与它的中介者通信。 典型应... 阅读全文

posted @ 2011-09-23 23:50 tLEE 阅读(404) 评论(0) 推荐(0)

十九.行为型设计模式——Iterator Pattern(迭代器模式)
摘要:定义 提供一种方法可以访问聚合对象,而不用暴露这个对象的内部表示。 UML类图如下: 其中类和对象的关系为: 1.Iterator(迭代器):迭代器定义访问和遍历元素的接口。 2.ConcreteIterator(具体迭代器):实现迭代器的接口;在遍历时跟踪当前聚合对象中的位置。 3.Aggregate(聚合):定义一个创建迭代器对象的接口。 4.ConcreteIterator(具体聚合):实现创建迭代对象,返回一个具体迭代器的实例。 典型应用的顺序图如下: 实例1——遍历例子: 下面的遍历例子延时了迭代器模式的应用。例子采用迭代来遍历集合中的子项目,定义了迭... 阅读全文

posted @ 2011-09-21 23:46 tLEE 阅读(546) 评论(0) 推荐(0)

十八.行为型设计模式——Interpreter Pattern(解释器模式)
摘要:定义 给出一种语言,定义这种语言的文法的一种表示,定义一个解释器,用它来解释使用这种语言的句子。 UML类图如下: 其中类和对象之间的关系为: 1.AbstractExpression(抽象表达式类):定义一个接口来执行解释操作。 2.TerminalExpression(终结符表达式):实现文法中管理终结符的解释操作;文句中的每个终结符都需要一个实例。 3.NonterminalExpression(非终结符表达式):文法中的每一条规则R::=R1R2....Rn都需要一个非终结符表达式类;维护每一条规则R1到Rn具有AbstractExpression接口实例;实现文法中关... 阅读全文

posted @ 2011-09-20 00:20 tLEE 阅读(671) 评论(0) 推荐(0)

十七.行为型设计模式——Command Pattern(命令模式)
摘要:定义 将一个请求封装成一个对象,因此可以参数化多个客户的不同请求,将请求排队,记录请求日志,并且支持撤销操作。 UML类图如下: 其中类和对象之间的关系为: 1. Command(抽象命令):声明执行操作的一个接口。 2. ConcreteCommand(具体命令类):将一个接收者对象绑定于一个动作;实现Execute方法,以调用接收者的相关的操作(Action)。 3. Client(客户应用程序):创建一个具体命令类的对象,并且设定它的接收者。 4. Invoker(调用者):要求一个命令对象执行一个请求。 5. Receiver(接收者):知道如何执行关联请求的相关操... 阅读全文

posted @ 2010-11-15 23:14 tLEE 阅读(650) 评论(0) 推荐(0)

十六.行为型设计模式——Chain of Responsibility(责任链模式)
摘要:定义  避免请求发送者与接受者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。  UML类图如下:    其中类和对象的关系:  1. Handler(传递者接口):定义一个处理请求的接口;实现链中下一个对象(可选)。  2. ConcreteHandler(具体传递者):处理它所负责的请求;可以访问链中下一个对象;如果可以处理请求,就... 阅读全文

posted @ 2010-11-14 23:17 tLEE 阅读(1138) 评论(0) 推荐(0)

十五.结构型设计模式——Proxy Pattern(代理模式)
摘要:定义  为其他对象提供一个代理或地方以控制对这个对象的访问。当客户向proxy对象第一次提出请求时,proxy实例化真实的对象,并且将请求传给它,以后所有的客户请求都经由proxy传给封装了的真实对象。  proxy模式分为4种,用得最多的是远程和虚拟代理模式:  1. Virtual Proxy(虚拟代理):Proxy不会生成一个真实的耗费代理,直到非常必要时(首次有请求)。它用来存放花费大(实... 阅读全文

posted @ 2010-11-09 22:18 tLEE 阅读(546) 评论(0) 推荐(0)

十四.结构型设计模式——Flyweight Pattern(轻量级模式)
摘要:定义  运用共享技术有效地支持大量细粒度的对象,系统只使用少量的对象,而这些对象都相近,状态变化很小,对象使用次数增多。  UML类图如下:    其中类和对象的关系:  1. Flyweight(抽象轻量级类):声明一个接口,通过它可以接受外来的参数(状态),并对新状态做出出来(作用)。  2. ConcreteFlyweight(具体轻量级类):实现Flyweight的接口,并为内部状态增加存... 阅读全文

posted @ 2010-11-08 22:30 tLEE 阅读(854) 评论(0) 推荐(0)

十三.结构型设计模式——Facade Pattern(外观模式)
摘要:定义 外观模式提供了一个统一的接口去访问多个子系统的多个不同的接口,外观模式定义了一个高层次的接口,使得子系统更容易被使用。 UML类图如下: 其中类和对象的关系为: 1. Facade(外形类):知道哪些子系统负责处理哪些请求;将客户的请求传递给相应的子系统对象处理。 2. Subsystem(子系统类):实现子系统的功能;处理由Facade传过来的任务;子系统不用知道Facade,在任何地方也没有引用Facade。 典型应用的顺序图如下: 实例1——抵押申请审核 抵押申请要得到三个审核,要检查银行是不是有足够存款,抵押物价格评估是不是合理,客户信誉评估是不是好。这三个评... 阅读全文

posted @ 2010-11-05 22:17 tLEE 阅读(466) 评论(0) 推荐(0)

十二.结构型设计模式——Decorator Patten(装饰模式)
摘要:定义  动态地给一个对象增加其他职责(Responsibility),就增加对象功能来说,装饰模式比生成子类实现更加灵活。  UML类图如下:    其中类和对象的关系为:  1. Component(部件):定义对象的接口,可以给这些对象动态增加职责(方法)。  2. ConcreteComponent(具体部件):定义具体的对象,Decorator可以给它增加额外的职责(方法)。  3. De... 阅读全文

posted @ 2010-11-04 22:34 tLEE 阅读(732) 评论(0) 推荐(0)

十一.结构型设计模式——Composite Pattern(组合模式)
摘要:定义  组合多个对象形成树形结构以表示整体-部分的结构层次。组合模式对单个对象和组合对象的使用具有一致性。  UML类图如下:    其中类和对象的关系如下:  1. Component(部件抽象接口):为组合的对象申明接口;某些情况下,实现从此接口派生出所有类共有的默认行为;定义一个接口可以访问及管理它的多个子部件(GetChild);如果必要,也可以在递归结构中定义一个接口访问它的父节点,并且... 阅读全文

posted @ 2010-11-03 23:52 tLEE 阅读(842) 评论(0) 推荐(0)

十.结构型设计模式——Bridge Pattern(桥接模式)
摘要:定义  将抽象部分与实现部分分离,使得它们两部分可以独立地变化。  UML类图如下:    其中类和对象的关系为:  1. Abstraction(抽象类):定义抽象类的接口,维护一个Implementor(实现抽象类)的对象。  2. RefinedAbstraction(扩充抽象类):扩充由Abstraction定义的接口。  3. Implementor(实现类接口):定义实现类的接口,这个... 阅读全文

posted @ 2010-11-02 21:20 tLEE 阅读(737) 评论(0) 推荐(0)

九.结构型设计模式——Adapter Pattern(适配器模式)
摘要:定义  将一个接口转换成客户想要的另一个接口,适配器模式使接口不兼容的那些类可以一起工作。  UML类图如下:    其中类的定义及关系如下:    1. Target(目标抽象类):定义客户要用的特定领域的接口。  2. Adapter(适配器-公接口):调用另一个接口,作为一个转换器。  3. Adaptee(适配器-母接口):定义一个接口,Adapter需要接入。  4. Clinet(客户... 阅读全文

posted @ 2010-11-01 21:31 tLEE 阅读(810) 评论(0) 推荐(0)

八.创建型设计模式——Singleton Pattern(单例模式)
摘要:定义  单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类,它提供全局访问的方法。单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行想整个系统提供这个实例。  UML类图如下:    类和对象之间的关系为:  1.Singleton(单例):提供了一个instance的方法,让客户可以使用它的唯一实例。内部实现只生成一... 阅读全文

posted @ 2010-10-26 23:04 tLEE 阅读(683) 评论(0) 推荐(0)

导航