GoF设计模式
GoF设计模式之创建型模式、GoF设计模式之结构型模式、GoF设计模式之行为型模式,设计模式精髓分析、UML示例、完整Java代码
conquer0715
追求卓越,成功会在不经意间追上你
展开
-
行为型模式之策略模式(Strategy)
策略模式对业务中的可替换部分进行了抽象,使得同一件事情可以使用不同的处理方式来完成。策略模式通过预先定义一些策略,主逻辑在处理过程中可以自由选择哪种策略来完成。使用策略模式,可以实现自由选择支付方式、自由选择计算方法、自由选择比较器等等,Java的比较器Comparator就是使用了策略模式,因此可以方便地切换不同的比较器进而完成不同的排序结果。对比“状态模式”,两者的原创 2013-04-02 23:37:11 · 3554 阅读 · 0 评论 -
行为型模式之模板方法模式(Template Method)
一、模式介绍模板方法模式适用于总体业务流程相对固定不变而流程中各环节的具体实现有所不同需要既保证流程的正确性还要保证具体实现的个性化的场景的场景。模板方法模定义了模板方法负责控制总体业务流程的走向,定义的这个模板方法将流程中不变的部分提取出来,将变化的部分推迟到子类中实现,遵守了开闭原则(对扩展开放,对修改关闭),定义的模板方法一般为final的避免子类复写修改业务逻辑从而保证了业务逻辑只能由原创 2013-04-05 23:09:30 · 3713 阅读 · 0 评论 -
行为型模式之观察者模式(Observer)
观察者模式描述的是事件的通知方式,可用于“订阅-分发”、“监听器”等场景,一个主题对象发生变化时通知所有的观察者进行相应的处理。JDK自身内置了观察者模式实现,可以直接使用JDK自身的观察者模式!场景:求职者可以向猎头注册登记,猎头在有工作的时候通知求职者。设计:示例代码:import java.util.ArrayList;import java.util.原创 2013-04-08 02:06:57 · 3436 阅读 · 0 评论 -
行为型模式之责任链模式(Chain of Responsibility)
一、模式介绍 责任链模式将请求的发送者与请求的处理者解耦和,使得发送者无从也无需得知请求的处理过程,它更重要的特征是使得多个处理者对象都有机会处理此请求,而且处理的结果是在编译器见不可预知的也就是动态是在运行期动态决定的,所以责任链的处理请求操作是灵活的。在JavaEE的规范里,配置的web.xml里的Filter就是一个典型的责任链模式,我们自定义的过滤器都要继承一个父过滤器,我们可以原创 2013-04-09 22:53:24 · 3666 阅读 · 0 评论 -
行为型模式之状态模式(State)
状态模式,将条件的判断从业务逻辑中分离出去。程序运行中所依赖的条件可视作程序的状态,程序的运行逻辑非常复杂,在不同的状态下需要有不同的表现,状态模式将程序“状态”(即程序运行条件)进行了抽象,这样,通过自由切换状态条件可以方便地得到不同的表现。我们在程序设计过程中,经常会涉及到在某些状态下进行特定的操作,一般我们会传入一个条件,然后对条件进行判断,如果是...则...,通常都会首先想到原创 2013-04-21 21:48:02 · 3498 阅读 · 0 评论 -
行为型模式之迭代器模式(Iterator)
一、模式介绍 迭代器模式又名游标模式,它使得一个集合对象可以在不暴露其内部表示的情况下被客户访问其包含对象,那么它是怎么做到的呢?它是通过实现了一组接口而做到的,而这组接口是开放给客户的,客户端只需使用该接口而无需知晓其实现的细节,因为封装的特性外界无法得知集合内部的表示那么实现集合迭代的具体细节就需要结合本身来完成。二、原理图三、示例代码//开放给客户的接口pu原创 2013-04-22 16:52:05 · 3509 阅读 · 0 评论 -
行为型模式之访问者模式(Visitor)
一、模式介绍 访问者模式将一个元素本身与对其的操作分离开来,它可以在元素本身不发生变化和不知情的条件下被不同的访问者访问应用到不同的场景中去从而实现出很多新的功能,由于元素和对其的操作的分离,访问者可以独立变化使用不同的方式对元素进行访问而不改变元素本身的结构表示,也就是说我们可以使用不同的访问者访问同样的对象而获得不同的效果。比如一台电脑,程序员回拿来开发程序,学生会用来学习,老师会用原创 2013-04-22 23:11:54 · 3416 阅读 · 0 评论 -
行为型模式之备忘录模式(Memento)
一、模式介绍 备忘录模式可以对一个对象的内部状态进行备份以在一个合适的时机恢复到这个状态,例如编辑器软件可以恢复到上次修改的操作。二、原理图三、示例代码public class Memento {String state1;String state2;public String getState1() {return state1;}p原创 2013-04-23 13:22:34 · 3508 阅读 · 0 评论 -
行为型模式之命令模式(Command)
一、模式介绍 命令模式的目的是将命令的发送者和命令的执行者松耦合,发送者不必需再关心命令的执行细节,执行者也必需关心命令的发送者,打比方说这种模式好像是可以用于把编程世界里方法的直接调用改为代理调用(不是很恰当但可以帮助理解命令模式)。命令模式中发送者对接受端是否接收、是否执行等不需知情。只是发送命令。二、原理图三、示例代码public class Receiver原创 2013-04-24 22:47:42 · 3460 阅读 · 0 评论 -
行为型模式之中介者模式、调停者模式(Mediator)
一、模式介绍 Mediator模式中文翻译为调停者模式,它的主要作用在于将有复杂依赖关系的类解耦和。调停者封装了一系列类的交互行为,它使得类和类之间的多对多交互变成了和类和调停者者之间多对一的交互,这种行为的封装使得类之间的依赖系更加集中化和易控化,使得类与类之间变得松耦合化。调停者模式就像一个中介,像一个交通枢纽等等,总之就是将各类的联系统一化,避免了因关系而与其它类的关系而使原创 2013-04-26 13:53:35 · 3615 阅读 · 0 评论 -
行为型模式之解释器模式(Interpreter)
一、模式介绍 Interpreter模式(解释器模式)属于行为模式,是一个普通编程工作中使用频率不高的模式,它定义一个解释器用来解释特定的文法表示,如果一种特定的业务类型经常被使用(如一连串复杂的运算或指令集),这个时候可以考虑使用解释器模式,它的作用在于对你预先定义下文法表示做出解释执行,利用解释器模式可以自己定义自己的运算方式等。二、原理图三、示例代码pu原创 2013-04-26 22:14:07 · 3772 阅读 · 0 评论 -
结构型模式之装饰者模式(Decorator)
一、模式介绍Decorator模式(装饰着模式)又名包装器(Wrapper),主要应用于给某个类的实例(不是类本身)在运行期间动态的添加一些额外的职责。与创建一个子类相比,这种模式更具有灵活性。因为如果因为一个额外功能的扩展就派生出一个子类的话,不断新增的额外功能就会需要不断的派生子类,而且这些扩展的功能必须是事先可预见的,即在编译时就可以确定的,也就是静态的,使用Decorator模式的好处原创 2013-04-01 23:37:14 · 3509 阅读 · 0 评论 -
结构型模式之代理模式(Proxy 与 JDK动态代理)
一、功能介绍代理模式,顾名思义,就是给一个类做代理,与现实中的代理人、经纪人相类似。在编程工作中遇到以下几种情况可以考虑使用代理模式:1、访问一个类需要经过一些特定的检查(如权限认证),不符合条件的将访问失败2、访问一个类的前后需要添加某些额外的操作(如日志记录)3、由于某些原因无法访问到某个类的特定功能总之代理模式就是控制了类的访问,好比一个中介代为处理客户端的请求,请求的过原创 2013-04-03 00:42:54 · 3403 阅读 · 0 评论 -
结构型模式之外观模式(Facade)
一、模式介绍Facade(外观模式):为子系统的一组接口提供一个一致的界面。定义一个高层的接口,使得这个子系统更加容易使用,我们在编程工作中如果遇到复杂多变子系统耦合的问题不妨试试此模式。Facade模式为系统的相对复杂或多变的一组接口或子系统提供了一个一致的门面,调用的客户端无需在关心子这组接口或子系统的工作细节而只与这么门面交互,从而屏蔽了子系统的复杂性也将客户端与复杂的系统类进一步解原创 2013-04-04 01:36:54 · 3429 阅读 · 0 评论 -
结构型模式之适配器模式(Adapter)
一、模式介绍 “适配器模式是把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。”这种情形多发生于重构老系统,或者不同系统的整合的时候,已经有老系统或部分的软件模块接口成型并能很好的工作,而新需求的接口需要完成的工作完全可以由这些已存在的实现参与来完成,只是新接口与老接口的规范不相同不能直接拿来使用,需要在老接口和新接口之间做一个“原创 2013-04-08 10:21:51 · 3531 阅读 · 0 评论 -
结构型模式之享元模式(Flyweight)
一、模式介绍 享元模式是为避免有共性的细粒度的对象大量地被实例化而存在的,它使用的共享技术避免了大量不必要的内存开销,即对于相似的对象尽量使用共享体而不是创建新对象。然而共享体往往不能满足每个对象的个性化要求即不是对象的所有状态都能用来共享,这时候我们可以把对象的状态按是否能被共享分为两部分,能共享的称之为内部状态,不能共享的称之为外部状态。内部状态是共享体内部的(初始化时已确定原创 2013-04-15 18:34:31 · 3630 阅读 · 0 评论 -
结构型模式之组合模式(Composite)
一、模式介绍 组合模式是一个比较常用的模式,它的作用在于讲一系列有相同特征的对象以树形结构组合起来,形成“部分-整体”的层次结构,单个对象和组合对象对客户端开放一致的访问接口,客户端并不知晓访问的是单个对象还是一个组合对象,这就是一种解耦,解除了客户端和复杂对象之间的耦合关系,这使得客户端访问复杂对象变得简单。二、原理图三、示例代码public abstrac原创 2013-04-16 01:13:53 · 3396 阅读 · 0 评论 -
结构型模式之桥模式(Bridge)
一、模式介绍面向对象的编程过程中我们要实现某一业务模型会先对模型进行抽象建模,抽象确立以后再对其进行实现,通常来讲这是很合乎常理的构建过程,然而我们可能会遇到这样的情况,我们的实现很可能会面临变化,即抽象的实现的某一部分是不稳定的,在我们抽象的众多的实现中都会在同一个维度上进行扩展或改变,比如人这个抽象体我们伟大的祖国给出了十几亿的实现,而我们不能强迫每个人的都穿一样的衣服而我们也不能因为要穿原创 2013-04-18 23:00:55 · 3585 阅读 · 0 评论 -
创建型模式之单例模式(Singleton)
Singleton 最佳实践 JDK JDK1.4 双检锁原创 2013-04-02 17:13:30 · 3503 阅读 · 0 评论 -
创建型模式之原型模式(ProtoType)
一、模式介绍原型模式(ProtoType) 是通过一个类的对象对象来创建一个新对象(复制、克隆),使得新对象与原始对象保持相同的状态,如一样的属性值等。在需要一个与原始对象一模一样的对象而又不是统一个对象的或需要很多个与某个对象相同的拷贝版本对象的时候可以考虑使用原型模式。此模式与工厂模式结合使用创建对象是一个值得考虑的方式。对象的拷贝分为浅拷贝和 深拷贝,浅拷贝:只拷贝简单属性的值和对象属性原创 2013-04-05 18:48:15 · 3855 阅读 · 0 评论 -
创建型模式之抽象工厂模式(Abstract Factory)- 工厂方法模式(Factory Method)
一、模式介绍抽象工厂模式主要被用来完成一系列相互依赖的或者有组合关系的对象的创建过程,当软件系统中有多个产品族(业务品种或业务分类)而且系统一次需要同一产品族中的产品集合协作运行时候可以考虑使用抽象工厂模式。抽象工厂模式中的核心工厂包含了创建各种产品的方法但她是个抽象类,由不同的子工厂真正完成各种产品的创建工作。如果增加一种新的子工厂就可以产生同一特色的另外一种产品集合,如果要增加一种新类型的原创 2013-04-06 21:50:52 · 3585 阅读 · 0 评论 -
创建型模式之建造者模式(Builder)
建造者模式的精髓在于:对构建过程进行解耦一个对象的创建是非常复杂的,需要一步一步地操作,每个步骤都可能是有关联或依赖的,最重要的是同一套建造流程是需要被不同的建造者复用的,因此需要分层抽象以松耦目标:在不改变创建过程的前提下,可以创建出不同表象的对象原创 2013-04-08 15:03:42 · 3732 阅读 · 0 评论 -
创建型模式之简单工厂模式(Simple Factory )
简单工厂模式用于根据不同的参数创建不同的对象,比如人类工厂有个创建人类的方法,根据不同的参数,如果是boy则创建男孩对象,如果是girl则创建女孩对象。设计模型:示例代码:interface Human { public void Talk(); public void Walk();}class Boy implements Human{ @Overr原创 2015-01-21 11:06:28 · 3533 阅读 · 0 评论