设计模式
innerpeacez
小白养成计划
展开
-
设计模式
设计模式的分类及目的 创建型(Creational)模式:与对象的创建有关 结构型(Structural)模式:处理类或对象的组合 行为型(Behavioral)模式:对类或对象怎样交互和怎样分配职责进行描述 创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。 结构型模式:适配器模式、桥接模式、装饰者模式、组合模式、外观模式、享元模式、代理模式。 行为型模式:...原创 2018-03-08 11:34:06 · 324 阅读 · 0 评论 -
Java设计模式(10)之桥接模式
桥接模式 将抽象部分与具体实现部分分离,使它们都可以独立地变化。 帮助理解:具体的实现系统可从多个维度分类,桥接模式将多个维度抽象出来,多个维度可以独立变化,再进行聚合,将多个维度组合起来使用,减少了各维度间的耦合。 举个例子帮助理解: 如果我们想要自己组装一台电脑,我们需要购买CPU、显卡、内存条、显示器;而往往这些东西不可能是一个厂商生产的,我们买来的电脑框架提供了插入这些组件的各...原创 2018-03-20 11:09:58 · 213 阅读 · 0 评论 -
Java设计模式(14)之模板方法模式
模板方法模式 准备一个抽象类,提供一个模板方法去实现顶级逻辑,这个抽象类可以实现一些通用的具体逻辑,同时声明一些抽象方法由子类去实现这些基本方法,再者这个抽象类可以提供一种hook机制,这种hook机制使得模板方法更加的灵活。 类型: 行为型模式(父类与子类之间的行为型模式) 模板方法的几个角色: AbstractTemplate:抽象模板,定义模板方法,同时暴露具体算法的抽象...原创 2018-03-24 12:32:34 · 210 阅读 · 1 评论 -
Java设计模式(18)之命令模式
命令模式 将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。命令模式通过这种封装的方式实现将客户端和接收端解耦。 类型: 行为型模式(类与类之间的行为型模式) 命令模式的几个角色: 抽象命令接口Command:定义命令的接口,声明执行的方法。 具体的命令对象ConcreteCommand:持有具体的接受者对象,完成具体的具体的命...原创 2018-03-30 15:10:12 · 6743 阅读 · 4 评论 -
Java设计模式(19)之备忘录模式
备忘录模式 在不破坏封装性的前提下,保存一个对象需要保存的内部状态,并且在这个对象之外的地方将这些内部状态保存起来。当这个对象需要回归原来的状态时,可以通过保存起来的状态恢复到原来的状态。当你可能需要将对象的状态恢复到原来的状态时,就可以使用备忘录模式。 类型: 行为型模式(类的状态的行为型模式) 备忘录模式的几个角色: 发起者对象(Originator):创建Memento对...原创 2018-03-31 13:50:17 · 296 阅读 · 1 评论 -
Java设计模式(15)之观察者模式
观察者模式 观察者模式又叫(发布-订阅)模式,观察者通过监听某个主题,一旦主题的状态发生改变,则自动通知观察者。 类型: 行为型模式(类与类之间的行为型模式) 观察者模式中设计的角色: 抽象主题(Subject):定义具体主题所需的注册,删除和通知观察者的方法接口。 具体主题(具体被观察者):具体主题的状态发生改变时,则通知这个主题的观察者。 抽象观察者(Observer):得...原创 2018-03-26 15:05:53 · 211 阅读 · 0 评论 -
Java设计模式(23)之解释器模式
Java中的解释器模式 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。使用解释器模式为语言创建解释器。 类型: 通过中间类的行为型模式 解释器模式中的角色: 抽象的解释器AbstractExpression:定义解释操作的接口,例如:interpret() 终结符表达式TerminalExpression:为文法的终结符实现解释...原创 2018-04-09 15:02:09 · 251 阅读 · 0 评论 -
Java设计模式终章
个人总结: 在学完最后一种设计模式之后,关于设计模式的学习暂时告一段落了,学习过程历时一个多月,粗略的学习完了23种设计模式,期间阅读了《Head First》,《大话设计模式》和大量前人的博客,学习到的东西还是很多的,也很有价值,也特地创建了专栏记录了自己的学习过程,相信以后自己对于设计模式还会有更加深入的理解,不过这也是以后的事了。 附上最近喜欢的一句话:不要做感动自己的那个人 设计...原创 2018-04-09 15:20:47 · 374 阅读 · 2 评论 -
Java设计模式(20)之状态模式
状态模式 允许对象在内部状态改变时,改变它的行为,对象看起来好像修改了它的类。当一个对象的行为改变根据它的状态而改变时,就可以使用状态模式。 类型: 行为型模式(类的状态的行为型模式) 状态模式的几个角色: 具体对象Context:维护具体状态的实例,定义当前的状态 抽象状态对象State:抽象状态接口,定义状态改变时Context对象行为改变的方法 具体状态对象Concre...原创 2018-04-02 15:25:31 · 239 阅读 · 0 评论 -
Java设计模式(16)之迭代器模式
迭代器模式 提供一种方法顺序的访问一个聚合对象(数组,堆栈,列表,散列表等)中的各个元素,而不暴露其内部的表示。 类型: 行为型模式(类与类之间的行为型模式) 迭代器模式的几个角色: 抽象容器类:定义具体容器中的方法 具体容器类:用来存放聚合对象中的元素 抽象迭代器:提供一种方式,使得实现了此接口的聚合对象通过迭代的方式遍历元素 具体聚合对象:数组,堆栈,列表等 迭代器...原创 2018-03-28 11:27:02 · 328 阅读 · 0 评论 -
Java设计模式(21)之访问者模式
访问者模式 表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。当你想要一个为一个对象的组合增加新的能力,且不用改变封装的结构元素时,就可以使用访问者模式。 类型: 行为型模式(通过中间类的行为型模式) 访问者模式中的几个角色: 抽象访问者(Visitor)角色:抽象的访问者接口,定义针对所有的不同的具体节点做出的对应的反应...原创 2018-04-03 22:07:23 · 202 阅读 · 0 评论 -
Java设计模式(22)之中介者模式
中介者模式 用一个中介者对象来封装一系列对象的交互,中介者使各对象不需要显示的相互应用,从而使其耦合松散,而且可以独立的改变他们之间的交互。使用中介者模式集中管理多个对象之间复杂的沟通方式。 类型: 行为型模式(通过中间类的行为型模式) 中介者模式中的几个角色: 抽象的中介者角色(Mediator):定义Colleague之间的交互方式的接口,如果具体中介者对象有多个,可以抽象出来...原创 2018-04-04 14:40:20 · 211 阅读 · 0 评论 -
行为型模式分析
行为型模式可以分为以下四类: 父类与子类 两个类之间 类的状态 通过中间类 如下图:原创 2018-03-23 11:26:42 · 315 阅读 · 0 评论 -
Java设计模式(13)之策略模式
个人感想: 今天开始学习第一种行为型模式,加油!!! 策略模式 准备一组同一类的算法,并且将每个算法封装到具有共同接口的独立的类中,从而使得客户端可以灵活的进行算法的切换,客户端自行决定使用哪种算法。 类型: 行为型模式(父类与子类之间的行为型模式) 策略模式涉及到三个角色: 环境(Context) 对象:持有一个Strategy的引用,并根据具体情况执行具体策略。 抽象策...原创 2018-03-23 11:14:45 · 288 阅读 · 0 评论 -
Java设计模式(5)之原型模式
原型模式: 顾名思义。将一个对象当作原型,通过对象克隆的方式复制,创建出更多与原型对象相同类型的对象。 类型: 创建型模式 原型对象关系图: 原型对象的3个角色: 客户(Client)角色:客户类提出创建对象的请求。 抽象原型(Prototype)角色:这是一个抽象角色,通常由一个Java接口或Java抽象类实现。此角色给出所有的具体原型类所需的接口。 具体原型(Co...原创 2018-03-14 20:16:56 · 408 阅读 · 0 评论 -
Java设计模式(6)之适配器模式
个人感想: 今天开始学习第一种结构型模式了,加油!!! 适配器模式: 把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 类型: 结构型模式 适配器模式的角色: 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。 需要适配的类(Adaptee):需要适配的类或适配者类。 适配器...原创 2018-03-15 17:14:22 · 227 阅读 · 0 评论 -
Java设计模式(1)之工厂模式
作用: 工厂模式主要是为了将创建对象的过程交给工厂,降低代码侵入性,降低耦合度。 类型:创建型模式 工厂模式分为三类: 1、 普通工厂模式 2、 工厂方法模式 3、 静态工厂方法模式 关系图: 1、普通工厂模式: 创建People接口: /** * Create by zhaihongwei on 2018/3/9 */ public inte...原创 2018-03-09 13:08:18 · 297 阅读 · 0 评论 -
Java设计模式(2)之抽象工厂模式
抽象工厂模式 抽象工厂模式是工厂模式的一种演进形式,因为工厂模式存在一个问题,虽然类的创建交给了工厂,但是类的创建依然依赖于工厂类,就是说,如果先要拓展功能就必须对工厂类进行修改,依然需要改变源码,这不符合包庇原则,所以就有了抽象工厂的概念 抽象工厂模式:创建多个工厂类,如果需要增加新的功能,就再增加一个工厂类完成新的功能,这样就不需要修改之前的代码了。 类型:创建型模式 关系图 ...原创 2018-03-10 10:12:33 · 215 阅读 · 0 评论 -
Java设计模式(7)之装饰者模式
装饰者模式 顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,通俗一点就是我们现在突然需要给某个已经打包好的类的方法进行增强,不能修改原有的代码,此时我们就可以使用装饰者模式,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例 类型: 结构型模式 装饰者模式的三个对象: 被装饰类(Source) 被装饰类实现的接口(Component) 装饰者类...原创 2018-03-16 18:48:57 · 246 阅读 · 0 评论 -
Java设计模式(3)之单例模式
单例模式 保证在同一个JVM中,同一个对象只存在一个实例。 类型:创建型模式 单例模式分为以下两种主流的形式: 懒汉模式 饿汗模式 两种形式的区别: 懒汉模式,在调用实例方法的时候才会实例化对象;饿汉模式在单例类被加载时候,就实例化一个对象交给自己的引用。饿汉模式不存在线程安全问题,懒汉模式需要考虑线程安全问题。 饿汉模式示例: /** * Cre...原创 2018-03-12 14:03:02 · 226 阅读 · 5 评论 -
Java设计模式(12)之享元模式
享元模式 享元模式又称为轻量级模式,享元模式通过资源共享的方式,实现大量细粒度对象的复用,从而减少同类对象的多次创建,减少内存的占用和提高程序的运行速度。 类型: 结构型模式 享元模式的状态: 内部状态/内蕴状态(Internal State):内部状态都存储在享元对象的内部,并且不会随着环境的改变而改变,内部状态便是可以共享的状态,一般通过构造方法或者setter方法传入。 ...原创 2018-03-22 16:54:16 · 195 阅读 · 0 评论 -
Java设计模式(4)之建造者模式
建造者模式: 将一个复杂对象的构建过程与它的内部属性填充分离,从而可以使用同一个构建过程建造出不同的产品。 分类: 创建型模式 结构: Product:产品类,便于具体建造者进行建造,一般产品类是多种具体产品的共性; Director:指挥者,利用具体建造者创建具体的产品,并且对具体产品的组成部分进行构建; AbstractBuilder:抽象建造者,定义抽象的建造方法,用以规...原创 2018-03-13 14:23:03 · 217 阅读 · 0 评论 -
Java设计模式(11)之组合模式
组合模式 又叫(部分–整体)模式,是用于把一组相似的对象当作一个单一的对象来处理,从而方便操作。组合模式依据树形结构来组合对象,从而表示部分以及整体层次。组合模式使得用户可以使用一致的方法操作单个对象和组合对象。 类型: 结构型模式 组合模式的角色: Component:一组对象抽象的定义 Composite:容器结构 Leaf:叶子结构 Client:客户类 组合模式...原创 2018-03-21 17:05:27 · 292 阅读 · 0 评论 -
Java设计模式(9)之外观模式
外观模式: 客户端访问子系统,需要通过外观对象,外观对象为各个子系统中的各种功能提供一个一致的界面,外观模式相当于定义了一个接口,这个接口使得这些子系统更加容易使用。 类型: 结构型模式 外观模式的3个角色: 客户端Client:访问子系统,需要通过外观对象。 外观对象Façade:为客户端访问子系统提供一个统一的入口。 子系统Modules: 每个子系统有各自特有的功能。 ...原创 2018-03-19 11:50:29 · 177 阅读 · 0 评论 -
Java设计模式(8)之代理模式
代理模式: 为真实对象提供一种代理以便控制对这个真实的访问。使用代理对象完成用户请求,屏蔽用户对真实对象的访问。 类型: 结构型模式 代理模式的角色: 源接口(Component):定义代理类和被代理类的公共对外方法。 被代理类/真实对象(Source):只有代理对象才能访问。 代理类(Proxy):访问真实对象。 客户端(ProxyTest):客户端访问真实对象前,需要进行权...原创 2018-03-17 20:20:40 · 242 阅读 · 0 评论 -
Java设计模式(17)之责任链模式
责任链模式 客户端将请求发送到一组责任链中,责任链中的多个处理器依次处理,如A处理器先处理,没有处理,则B处理器开始处理,依次类推,处理完成之后交由请求接受者,客户并不知道具体是哪个处理器处理了请求,从而实现了客户端与请求接受者之间的解耦。当你想要让多个对象有机会处理同一个请求的时候,就可以使用责任链模式。 类型: 行为型模式(类与类之间的行为型模式) 责任链模式中的角色: 抽...原创 2018-03-29 12:45:40 · 335 阅读 · 0 评论