java设计模式
我是索隆
高级Java工程师
展开
-
设计模式之适配器模式
适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。A d a p t e r 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 适用场景: 1、已经存在的类的接口不符合我们的需求; 2、创建一个可以复用的类,使得该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作; 3、在不对每一个都进行子类化以匹配它们的接口的情况下,使用一些原创 2016-03-13 17:25:19 · 366 阅读 · 0 评论 -
设计模式之状态模式
定义:又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。 状态模式的结构: 用一句话来表述,状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之原创 2016-04-07 23:40:31 · 263 阅读 · 0 评论 -
设计模式之策略模式
定义:策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 策略模式的好处在于你可以动态的改变对象的行为。 设计原则:是把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口(c++z中可以用虚类),然后在类中包含这个对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类的行为。 策略模式中有三个对象: (1)原创 2016-04-08 23:00:13 · 292 阅读 · 0 评论 -
设计模式之命令模式
定义:命令模式可以将请求封装在一个对象中,允许你可以像管理对象一样管理方法,传递并在合适的时机调用他们。 Command模式可应用于 a)整个调用过程比较繁杂,或者存在多处这种调用。这时,使用Command类对该调用加以封装,便于功能的再利用。 b)调用前后需要对调用参数进行某些处理。 c)调用前后需要进行某些额外处理,比如日志,缓存,记录历史操作等。 Command模式有如下效果: a原创 2016-04-08 23:54:34 · 236 阅读 · 0 评论 -
设计模式之调停者模式
调停者模式是对象的行为模式。调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显引用。从而使它们可以较松散地耦合。当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响到其他的一些对象之间的相互作用。从而保证这些相互作用可以彼此独立地变化。 调停者模式包括以下角色: 抽象调停者(Mediator)角色: 定义出同事对象到调停者对象的接口,其中主要方法是一个(或多个)事原创 2016-03-27 15:35:57 · 390 阅读 · 0 评论 -
设计模式之代理模式
1、代理模式 所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之前起到中介的作用。 代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。 举一个例子,生活中乘坐出租车。 接口public interface traffic { public void tra原创 2016-03-27 23:25:51 · 276 阅读 · 0 评论 -
设计模式之解释器模式
其实没有什么好的例子引入解释器模式,因为它描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发编译器中;在实际应用中,我们可能很少碰到去构造一个语言的文法的情况。 定义:解释器模式是类的行为模式。给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。 模式所涉及的角色如下所示: (1)抽象表达式(Expres原创 2016-04-09 23:49:41 · 338 阅读 · 0 评论 -
设计模式之职责链模式
职责链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 适用场景: 1、有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定; 2、在不明确指定接收者的情况下,向多个对象中的一个提交一个请求; 3、处理一个请求的对象集合应被动态指定。 通用类图 代码实例 处理职责的原创 2016-03-28 21:38:58 · 327 阅读 · 0 评论 -
设计模式之装饰器模式
**定义:**Decorator装饰器,顾名思义,就是动态地给一个对象添加一些额外的职责,就好比为房子进行装修一样。因此,装饰器模式具有如下的特征: 它必须具有一个装饰的对象。 它必须拥有与被装饰对象相同的接口。 它可以给被装饰对象添加额外的功能。 用一句话总结就是:保持接口,增强性能。 装饰器通过包装一个装饰对象来扩展其功能,而又不改变其接口,这实际上是基于对象的适配器模式的一种变种。它原创 2016-04-10 15:56:37 · 256 阅读 · 0 评论 -
设计模式之迭代器模式
定义:提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。 迭代器模式由以下角色组成: 迭代器角色(Iterator): 负责定义访问和遍历元素的接口。 具体迭代器角色(Concrete Iterator):实现迭代器接口,并要记录遍历中的当前位置。 容器角色(Container): 负责提供创建具体迭代器角色的接口。 具体容器角色(Concrete Container)原创 2016-04-10 21:41:48 · 224 阅读 · 0 评论 -
设计模式之外观模式
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。 这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。 这个外观模式,实现并不复杂,这里直接上代码解释。 假设一个场景:实现四则运算。 首先创建一个四则运算的接口:publ原创 2016-03-14 22:13:48 · 376 阅读 · 0 评论 -
设计模式之模板方法模式
定义: 模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。模式中的角色 抽象类:实现了模板方法,定义了算法的骨架。 具体类:实现抽象类中的抽象方法,已完成完整的算法。 通用代码实现: 抽象类:public原创 2016-04-06 23:22:06 · 213 阅读 · 0 评论 -
设计模式之享元模式
享元模式:在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。 在Flyweight模式中,由于要产生各种各样的对象,所以在Flyweight(享元)模式中常出现Factory模式。Flyweight的内部状态是用来共享的,Flyweight factory负责维护一个对象存储池(Flyweight Pool)来存放内部状态的对象。Flyweight模式是一个提高原创 2016-03-30 22:10:03 · 226 阅读 · 0 评论 -
设计模式之建造者模式
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 四个要素 产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。在本类,产品类是一个具体的类,而非抽象类。实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。 抽象建造者:引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现。这样更原创 2016-03-30 23:25:38 · 248 阅读 · 0 评论 -
设计模式之工厂模式
工厂模式分为三类: 简单工厂模式、工厂方法模式、抽象工厂模式 简单工厂模式: 简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。 在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化, 如同一个交通警察站在来往的车辆流中,决定放行那一个方向的车辆向那一个方向流动一样。原创 2016-03-31 23:10:20 · 261 阅读 · 0 评论 -
设计模式之合成模式
合成模式: 合成模式把部分和整体的关系用树结构表示出来,合成模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等对待。 抽象构件角色: 这是一个抽象角色,它给参加组合的对象规定一个接口。这个角色给出共有的接口及其默认行为。 树叶构件角色: 代表参加组合的树叶对象,一个树叶没有下级的子对象定义出参加组合的原始对象的行为。 树枝构件角色: 代表参加组合的有子对象的对象原创 2016-03-17 23:44:24 · 633 阅读 · 0 评论 -
设计模式之原型模式
定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 原型模式主要用于对象的复制,它的核心就是原型类Prototype。Prototype类需要具备以下两个条件 实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否原创 2016-04-01 23:20:51 · 212 阅读 · 0 评论 -
设计模式之单例模式
单例模式有以下特点: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 一、懒汉式单例//懒汉式单例public class Singleton { private static Singleton single=null; private Singleton(){} public static Sing原创 2016-03-23 23:28:42 · 308 阅读 · 0 评论 -
设计模式之桥接模式
生活中的一个例子: 拿汽车在路上行驶的来说。既有小汽车又有公共汽车,它们都不但能在市区中的公路上行驶,也能在高速公路上行驶。这你会发现,对于交通工具(汽车)有不同的类型,它们所行驶的环境(路)也有不同类型,在软件系统中就要适应两个方面(不同车型,不同道路)的变化,怎样实现才能应对这种变化呢? 概述: 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维原创 2016-03-21 23:11:22 · 403 阅读 · 0 评论 -
设计模式之观察者模式
观察者模式 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更新自己。 观察者模式的组成 抽象主题角色 把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。 抽象观察者角色 为所有原创 2016-03-27 13:22:57 · 326 阅读 · 0 评论 -
设计模式之备忘录模式
定义: 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态 备忘录模式的结构 发起人:记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据。 备忘录:负责存储发起人对象的内部状态,在需要的时候提供发起人需要的内部状态。 管理角色:对备忘录进行管理,保存和提供备忘录。 通用代码: 发起者代码原创 2016-04-05 23:13:08 · 243 阅读 · 0 评论 -
设计模式之访问者模式
定义:访问者模式是对象的行为模式。访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。 代码实例如下:public interface Service { public void accept(Visitor visitor);}public class Draw implements Service {原创 2016-04-10 22:17:21 · 306 阅读 · 0 评论