设计模式
亮了的blog
喜欢学习各种新兴技术,并努力用于实践
展开
-
设计模式-单例
单例模式简要总结: 1.饿汉模式import java.io.Serializable;/** * 饿汉式(线程安全,调用效率高,不能延迟加载) * @author Administrator * */public class SinglePatternDemo1 implements Serializable { //私用构造方法 private SinglePatt原创 2016-02-14 14:42:15 · 427 阅读 · 0 评论 -
设计模式-中介者
1.核心: -如果一个系统中对象之间的联系呈现网状结构,对象之间存在大量多对多关系,将导致关系复杂,这些对象称之为”同事对象”,可以引入一个中介者对象,使各个同事对象只跟中介者对象打交道,将复杂的网络结构化解为星形结构,通过中介者对象,统一协调各个同事对象之间的关系。 2.中介者模式类图: 3.理解:该模式本质就是解耦多个同事对象之间的交互关系。每个对象都持有中介者对象原创 2016-02-17 10:55:02 · 352 阅读 · 0 评论 -
设计模式-命令
1.核心:将一个请求转化为一个对象,从而可以使用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。也称之为:动作Action模式,事务transaction模式 2.开发常见情景: -struts2,action的整个调用过程中就有命令模式 -数据库事务机制的底层实现 -命令的撤销和恢复 3.角色: <1>Command抽象命令原创 2016-02-17 12:40:01 · 422 阅读 · 0 评论 -
设计模式-解释器
1.用于描述如何构成一个简单的语言解释器,主要用于使用面向对象语言开发的编译器和解释器模式 2.开发中常见情景: -EL表达式的处理 -正则表达式解释器 -SQL语法的解释器 -数学表达式解析器原创 2016-02-17 12:53:16 · 383 阅读 · 0 评论 -
设计模式-访问者
1.处理问题:对于存储在一个集合的对象,可能具有不同的类型(即使有一个公共的接口),对于该集合的对象,可以接受一类称为访问者的对象来访问,不同的访问者其访问方式也有所不同 2.定义:表示一个作用于某对象结构中的各元素的操作,使用该模式可以在不改变各个元素的类的前提下定义作用于这些元素的新操作 3.开发场景: -XML文档解析设计 -编译器的设计 -复杂集合对象的处理原创 2016-02-17 12:57:50 · 324 阅读 · 0 评论 -
设计模式-策略
1.核心:对应于解决某个问题的一个算法族,允许用户从该算法族中任选一个算法解决某一问题,同时可以方便的更换算法或增加新的算法,由客户端决定调用哪个算法 2.角色: <1>上下文对象:该类中实现了对抽象策略中定义的接口或抽象类的引用 <2>抽象策略对象:通常由一个接口或抽象类实现,给出所有的具体策略类所需的接口 <3>具体策略:封装了实现不同功能的不同算法 3.开发业原创 2016-02-17 14:20:39 · 252 阅读 · 0 评论 -
设计模式-模板方法
1.模板方法模式是编程中经常用得到的模式,定义了一个操作中的算骨架,将某些步骤延迟到子类中实现。这样新的子类可以不改变一个算法结构的前提下重新定义该算法的某些步骤 2.核心: 处理某个流程的代码已经都具备,但是基中某个节点的代码暂时不能确定,因此采用工厂方法模式,将这个节点的代码实现转移给子类完成,即:处理步骤父类中定义好,具体实现延迟到子类中定义 3.方法回调(钩子方法)原创 2016-02-17 15:14:48 · 383 阅读 · 0 评论 -
设计模式-状态
1.核心:用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题 2.角色: <1>Context环境类:维护一个State对象,定义了当前的状态,并控制状态的切换 <2>State抽象状态类 <3>ConcreteState具体状态类:每一个类封装一个状态对应的行为 3.开发中的场景: -银行系统中账号状态的管理 -OA系统中公文状态的管原创 2016-02-17 15:57:02 · 298 阅读 · 0 评论 -
设计模式-观察者
1.核心: -观察者模式主要用于1:N的通知。当一个对象(目标对象Subject或者Objservable)的状态变化时,需要告知一系列对象(观察者对象,Observer),让他们做出响应 -通知观察者的方式: 推:每次都把通知以广播的方式发送给所有观察者,所有观察者只能被动接收 拉:观察者知道有消息,至于什么时候获取出内容,获取什么内容都可以原创 2016-02-17 16:49:07 · 355 阅读 · 0 评论 -
设计模式-迭代器
1.场景: -提供一种可以遍历聚合对象的方式。又称为:游标cursor模式 -聚合对象:存储数据 -迭代器:遍历数 2.开发场景: -JDK内置迭代器 3.开发示例: <1>抽象迭代器对象//抽象迭代角色public interface MyIterator { void first();//将游标指向聚合对象的第一个对象 vo原创 2016-02-17 09:50:25 · 284 阅读 · 0 评论 -
设计模式-责任链
1.模式分类: 行为型模式:关注系统中对象之间的相互交互,研究系统在运行进对象之间的相互通信和协作,进一步明确对象的职责,共有11种:责任链,观察者,迭代器,中介者,备忘录,状态,策略,命令,解释器,访问者,模板 创建型模式:关注对象的创建过程,共有4种:单例,原型,工厂(简单工厂,工厂方法,抽象工厂),建造 结构型模式:关注对象和类的组织,共有7种:代理,装饰,外观,原创 2016-02-16 17:22:08 · 446 阅读 · 0 评论 -
设计模式-结构型模式汇总
1.代理模式:为真实对象提供一个代理,从而控制对真实对象的访问 2.适配模式:使原本由于接口不兼容不能一起工作的类可以一起工作 3.桥接模式:处理多层继承结构,处理多维度变化的场景,将各个维度设计成独立的继承结构,使各个维度可以独立的扩展,在抽象层建立关联 4.组合模式:将对象组合成树状结构,以表示“部分和整体”层次结构,使得客户可以统一的调用叶子对象和容器对象 5.装饰模式:动态地给一个对原创 2016-02-16 15:23:53 · 348 阅读 · 0 评论 -
设计模式-原型
1.使用场景 <1>通过new产生一个对象需要非常繁琐的数据准备或访问权限,可以使用原型模式 <2>java中的克隆技术以某个对象为原型,复制出新的对象,显然新的对象具备原对象的特点。克隆类似于new,但是不同于new。new创建新的对象属性采用的是默认值。克隆出的对象的属性值完全和原型对象相同 2.优势 效率高(直接克隆,避免了重新执行构造过程的步骤) 3.实现原创 2016-02-15 14:00:23 · 323 阅读 · 0 评论 -
设计模式-适配器
1.结构型模式:从程序结构上实现松藕合,从而可以扩大整体的类结构,用来解决更大的问题 分类:适配器模式,代理模式,桥接模式,装饰模式,组合模式,外观模式,享元模式 2.适配器模式:将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能在一起工作的类可以在一起工作 3.适配器模式中的角色: <1>目标接口(Target):客户所期待的接口。目标可原创 2016-02-15 15:19:46 · 352 阅读 · 0 评论 -
设计模式-代理
1.代理模式:通过代理,控制对对象访问。可以详细控制访问某个类(对象)的方法,在调用这个方法前做前置处理,调用这个方法后做后置处理 2.角色: <1>抽象角色:定义代理角色和真实角色的公共对外方法 <2>真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色使用(关注真正的业务逻辑) <3>代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方原创 2016-02-15 16:35:07 · 305 阅读 · 0 评论 -
设计模式-桥接
1.核心要点:处理多层继承结构,处理多维度变化的场景,将各个维度设计成独立的继承结构,使各个维度可以独立的扩展在抽象层建立关联 2.备注:桥接模式可以取代多层继承的方案。多层继承违背了单一职责的原则,复用性较差,会导致类的数量显著增多。使用桥接模式可以极大的减少子类的个数,降低管理和维护成本 桥接模式极在的提高了系统可展性,在两个变化维度中任意扩展一个维度,都不需要修改原有的系统,符合ocp原则原创 2016-02-15 17:23:10 · 331 阅读 · 0 评论 -
设计模式-组合
1.场景:把部分和整体的关系用树形结构表,从而使客户端可以使用统一的方式处理部分对象和整体对象 2.角色: <1>抽象构件(Component)角色:定义叶子和容器构件的共同点 <2>叶子(Leaf)构件角色:无子节点,实现抽象构件的抽象方法 <3>容器(Composite)构件角色:有容器特征,可以包含子节点 3. 4.开发中的应用场景: <1>操作系原创 2016-02-16 10:22:55 · 306 阅读 · 0 评论 -
设计模式-装饰
1.职责: <1>动态为一个新的对象增加新的功能 <2>装饰模式是一种用于代替继承的技术,无须通过继承增加子类就能扩展对象的功能。使用对象的关联关系代替继承关系,更加灵活,避免了类型体系的快速膨胀。 2.角色: <1>Component抽象构件角色 真实对象和装饰对象拥有相同的接口。这样客户端对象就能够以与真实对象相同的方式和装饰对象原创 2016-02-16 11:37:01 · 295 阅读 · 0 评论 -
设计模式-外观
1.迪米特法则:(最少知识原则)一个软件实体与另一个软件实体发生关系时,当前软件实体应当尽可能少的了解软件实体的内容,(不和陌生人说话)。设计初衷在于降低类之间的耦合 2. 3.外观模式(门面模式)核心:为子系统提供统一的入口,封装子系统的复杂性,便于客户端调用 4.开发中常见的场景: 出现的频率很高,JDBC封装后的commons提供的DBUtils类,hibernate提供的原创 2016-02-16 13:45:56 · 395 阅读 · 0 评论 -
设计模式-享元
1.场景:内存属于稀缺资源,不能随便浪费,如果有很多个完全相同或相似的对象,可以通过享元模式,节省内存(各种池) 2.核心: <1>享元模式以共享的方式高效地支持大量细粒度对象的重用 <2>享元对象能做到共享的关键是区分了内部状态和外部状态 内部状态:可以共享,不会随环境变化而变化 外部状态:不可以共享,会随环境变化而变化 3.角色:原创 2016-02-16 15:15:07 · 289 阅读 · 0 评论 -
设计模式-备忘录
1.核心:保存某个对象内部状态的copy,可以将该对象恢复到原先的状态 2.结构: <1>发起人(Originator):要被备分的成员,提供创建备忘录的方法,就是将它自身的某些信息copy一份到一个备忘录对象中。并提供另外一个方法将备忘录中的信息覆盖自身的信息 <2>备忘录(Memeto):备忘录对象中包含存储发起人状态的成员变量,它提供set,get或构造方法保存发起人状及原创 2016-02-20 18:27:51 · 427 阅读 · 0 评论