
软件工程
文章平均质量分 79
景象
这个作者很懒,什么都没留下…
展开
-
创建型模式2:抽象工厂模式(Abstract Factory)
概述在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建工作。如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合?这就是我们要说的抽象工厂模式。意图提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。模型图逻辑模型:物转载 2014-05-06 00:37:20 · 313 阅读 · 0 评论 -
结构型模式3:装饰模式(Decorator Pattern)
概述在软件系统中,有时候我们会使用继承来扩展对象的功能,但是由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀。如何使“对象功能的扩展”能够根据需要来动态地实现?同时避免“扩展功能的增多”带来的子类膨胀问题?从而使得任何“功能扩展变化”所导致的影响将为最低?这就是本文要讲的Decorator模式。转载 2014-05-22 19:48:34 · 342 阅读 · 0 评论 -
结构型模4:组合模式(Composite Pattern)
概述组合模式有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。意图将对象组合成树形结构以表示“部分-整体”的层次结构。Composite模式使得用户对单个对象和组合对象的使用具有一致性。[GOF 《设计模式》]结构图图1 Composite模式结构图转载 2014-05-22 19:52:13 · 368 阅读 · 0 评论 -
结构型模5:外观模式(Façade Pattern)
概述在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化。那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?这就是要说的Façade 模式。意图为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。[GOF 《设计模式》转载 2014-05-22 19:54:00 · 398 阅读 · 0 评论 -
行为型模式4:观察者模式(Observer Pattern)
概述在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。意图定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象转载 2014-05-25 21:44:04 · 321 阅读 · 0 评论 -
结构型模式专题总结
结构型模式概述结构型模式,顾名思义讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象,从而实现新的功能(对象结构型模式)。这些结构型模式,它们在某些方面具有很大的相似性,仔细推敲,侧重点却各有不同。Adapter模式通过类的继承或者对象的组合侧重于转换已有的接口;Bridge模式通过将抽象和实现相分离,让它们可以分别独立的变化,它强调的是系统沿着多转载 2014-05-25 21:39:57 · 337 阅读 · 0 评论 -
行为型模式5:命令模式(Command Pattern)
概述在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,可以实现二者之间的松耦合[李建忠]。这就是本文要说的Command模式。意图将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数转载 2014-05-25 22:38:27 · 337 阅读 · 0 评论 -
行为型模式7:状态模式(State Pattern)
一个对象的状态是这个对象属性值的一个组合,如果我们对一个对象的成员变量进行了赋值操作,或者调用了一个对象中的某个方法,这个对象的状态往往会发生变化。而与状态相关的逻辑可能分布在这个类的多个方法中。 我们引入一组新类,每个类代表一个不同的特定状态,然后将与状态相关的行为分配到这些新类中。换句话说,就是引入一组表示对象状态的类,然后把与状态相关的操作分配到这些表示状态的类中。一个对转载 2014-05-28 23:20:29 · 517 阅读 · 0 评论 -
行为型模式6:策略模式(Strategy Pattern)
策略模式(Strategy):它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。【1】基本概念 策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。【2】简单分析转载 2014-05-27 19:09:58 · 325 阅读 · 0 评论 -
行为型模式8:解释器模式(Interpreter Pattern)
解释器模式就是定义语言的文法,并且建立一个解释器来解释该语言中的句子。 给定一个语言后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。解释器模式将描述怎样在有了一个简单的文法后,使用模式设计解释这些语句。在解释器模式里面提到的语言是指任何解释器对象能够解释的任何组合。在解释器模式中需要定义一个代表 文法的命令类的等级结构转载 2014-05-28 23:22:47 · 482 阅读 · 0 评论 -
结构型模式2:桥接模式(Bridge Pattern)
概述在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。意图将抽象部分与实现部分分离,使它们都可以独立的变化。[GOF 《设计模式》]结构图图1 Bridge模式结构图生活中的例子桥接模式将抽象部分与它转载 2014-05-22 19:46:42 · 470 阅读 · 0 评论 -
结构型模7:代理模式(Proxy Pattern)
1.概述 因为某个对象消耗太多资源,而且你的代码并不是每个逻辑路径都需要此对象, 你曾有过延迟创建对象的想法吗 ( if和else就是不同的两条逻辑路径) ? 你有想过限制访问某个对象,也就是说,提供一组方法给普通用户,特别方法给管理员用户?以上两种需求都非常类似,并且都需要解决一个更大的问题:你如何提供一致的接口给某个对象让它可以改变其内部功能,或者是从来不存在的功能? 可以转载 2014-05-22 22:57:03 · 310 阅读 · 0 评论 -
行为型模式10:策略模式(Strategy Pattern)
一个策略是一个计划,或是一个方案。通过执行这个计划或是方案,我们可以完成某个任务。策略与算法相比,策略能够在更大的范围内提供可选方案。策略是一组方案,这些方案可以相互之间替换。 利用策略模式,我们可以把相互之间可替换的方案封装在一些具有共同接口的类中,从而使得他们可以相互替换。共同接口定义了策略的输入和输出,操作的实现在各个类中完成。通过应用策略模式可以把用于选择策略的代码逻转载 2014-06-02 20:27:02 · 411 阅读 · 0 评论 -
创建型模式1:单例模式(Singleton Pattern)
概述Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点。这就提出了一个问题:如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?客户程序在调用某一个类时,它是不会考虑这个类是否只能有一个实例等问题的,所以,这应该是类设计者的责任,而不是类使用者的责任。从另一个角度来说,Singleton模式其实也是一种职责型模式。因为我们创建了一个对象,这个对象扮演了独一转载 2014-05-06 00:32:50 · 365 阅读 · 0 评论 -
创建型模式3:建造者模式(Builder Pattern)
概述在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?这就是要说的建造者模式。本文通过现实生活中的买KFC的例子,转载 2014-05-07 23:28:24 · 319 阅读 · 0 评论 -
创建型模式4:原型模式(Prototype Pattern)
概述在软件系统中,有时候面临的产品类是动态变化的,而且这个产品类具有一定的等级结构。这时如果用工厂模式,则与产品类等级结构平行的工厂方法类也要随着这种变化而变化,显然不大合适。那么如何封装这种动态的变化?从而使依赖于这些易变对象的客户程序不随着产品类变化?意图用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。结构图Prototype模式结构图生活中的例子转载 2014-05-08 23:23:16 · 331 阅读 · 0 评论 -
创建型模式专题总结(Creational Pattern)
概述创建型模式,就是用来创建对象的模式,抽象了实例化的过程。它帮助一个系统独立于如何创建、组合和表示它的那些对象。本文对五种常用创建型模式进行了比较,通过一个游戏开发场景的例子来说该如何使用创建型模式。为什么需要创建型模式所有的创建型模式都有两个永恒的主旋律:第一,它们都将系统使用哪些具体类的信息封装起来;第二,它们隐藏了这些类的实例是如何被创建和组织的。外界对于这些对象只知道它们共同转载 2014-05-17 00:17:08 · 324 阅读 · 0 评论 -
创建型模式5:工厂方法模式(Factory Method)
概述在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口。如何应对这种变化?提供一种封装机制来隔离出“这个易变对象”的变化,从而保持系统中“其它依赖该对象的对象”不随着需求的改变而改变?这就是要说的Factory Method模式了。意图定义一个用户创建对象的接口,让子类决定实例化哪一个类。Factory M转载 2014-05-17 00:14:38 · 365 阅读 · 0 评论 -
行为型模式1:中介者模式
定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。类型:行为类模式类图:中介者模式的结构 中介者模式又称为调停者模式,从类图中看,共分为3部分: 抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信。一般包括一个或几个抽象的事件方法,并由子转载 2014-05-18 22:38:44 · 338 阅读 · 0 评论 -
行为型模式2:备忘录模式
定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态类型:行为类类图: 我们在编程的时候,经常需要保存对象的中间状态,当需要的时候,可以恢复到这个状态。比如,我们使用Eclipse进行编程时,假如编写失误(例如不小心误删除了几行代码),我们希望返回删除前的状态,便可以使用Ctrl+Z来转载 2014-05-18 22:44:45 · 315 阅读 · 0 评论 -
行为型模式3:迭代器模式
定义:提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。类型:行为类模式类图: 如果要问java中使用最多的一种模式,答案不是单例模式,也不是工厂模式,更不是策略模式,而是迭代器模式,先来看一段代码吧:[java] view plaincopypublic static void prin转载 2014-05-19 23:44:23 · 302 阅读 · 0 评论 -
结构型模式1:适配器模式(Adapter Pattern)
概述在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。那么如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?这就是本文要说的Adapter 模式。意图将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一转载 2014-05-19 23:48:06 · 343 阅读 · 0 评论 -
行为型模式11:职责链模式(Chain Of Responsibility)
职责链模式(Chain Of Responsibility),使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 这里发出这个请求的客户端并不知道这当中的哪一个对象最终处理该请求,这样系统的更改可以在不影响客户端的情况下动态的重新组织和分配责任。职责链模式UML类图转载 2014-06-02 20:34:24 · 466 阅读 · 0 评论 -
行为型模式9:模版方法模式(Template Method)
概述变化一直以来都是软件设计的永恒话题,在XP编程中提倡拥抱变化,积极应对。如何更好的去抓住变化点,应对变化?如何更好的提高代码复用?通过学习Template Method模式,您应该有一个新的认识。意图定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。[-GOF《设计模式》]结构图转载 2014-05-28 23:29:49 · 542 阅读 · 0 评论 -
行为型模式专题总结
行为型模式设计到算法和对象间的职责分配,不仅描述对象或类的模式,还描述它们之间的通信方式,刻划了运行时难以跟踪的复杂的控制流,它们将你的注意力从控制流转移到对象间的关系上来。行为型类模式采用继承机制在类间分派行为,例如Template Method 和Interpreter;行为对象模式使用对象复合而不是继承。一些行为对象模式描述了一组相互对等的对象如何相互协作以完成其中任何一个对象都单独无法完成转载 2014-06-02 20:38:25 · 795 阅读 · 0 评论