设计模式
昵称2021
持续学习,与时俱进
展开
-
设计模式--观察者模式
定义 在对象之间定义了一对多的依赖,当一方发生改变时,依赖它的对象都会受到通知并自动更新。 其实可以理解为消息发布者(被观察者)与订阅者(观察者),用户可以订阅或者取消订阅发布者的消息,当有新消息时发布者能够将其推送给所有的订阅者,当然订阅者也可以通过监听消息状态的改变来拉去消息。 下图为一个简单的发布者对象与订阅者对象: 当然java中也有自带的观察者模式中的观察者(订阅者)和被观察...原创 2018-04-24 21:36:08 · 164 阅读 · 0 评论 -
设计模式--桥接模式
1.定义 使抽象和实现解耦,使之都可以独立扩展不会影响对方 2.使用场景及设计 2.1.场景 现在有十种不同类型的电视,每种电视都有自己的遥控器,电视变化,对应的遥控器也要变化,而且如果新增一种电视型号,就要新增一种对应的遥控器 2.2.设计 使用桥接模式制作一个抽象tv接口,在抽象出一个RemoteControl遥控器类,使用RemoteControl类关联(桥接)tv接口,将实现予以解耦,而且...原创 2019-01-29 17:20:18 · 247 阅读 · 0 评论 -
设计模式-生成器模式
1.定义 封装一个产品的构造过程,并允许按步骤构造 2.使用场景及设计 2.1.使用场景 需要经过多个步骤创建的对象,如实际生活中的点餐流程,管理系统中的导出框架等 2.2.简略流程图 此处以点餐流程为例 3.测试代码 3.1.类图 3.2.测试代码 入口代码 package com.glt.designpattern.builder; public class InitMain { ...原创 2019-02-27 21:45:22 · 200 阅读 · 0 评论 -
设计模式-解释器模式
1.定义 给定一个语言,定义它的语法表示,并使用一个解释器来解释语法或表达式 2.使用场景及设计 2.1.使用场景 可以用于sql解析,或者特殊符号处理等 2.2.设计 此处设计一个and语法解析器,类图如下: 3.测试代码 package com.glt.designpattern.interpreter; public class InitMain { public static ...原创 2019-03-05 21:29:39 · 175 阅读 · 0 评论 -
设计模式-责任链模式
1.定义 将发送者与接收者解耦,为请求创建了一个接收者对象的链,使链上的所有对象都可能处理这个请求 2.使用场景 2.1.使用场景 java中servlet的Filter调用链、struts2拦截器调用链、spring启动流程、队列处理消息日志等 3.演示代码 3.1.演示流程 此处选取struts2的默认拦截器中basic拦截器栈的执行流程来演示此模式,basic拦截器栈内容如下: 其中引用的...原创 2019-03-03 13:31:45 · 162 阅读 · 0 评论 -
设计模式-原型模式
1.定义 通过复制现有的实例来创建新的实例,同时又能保证较高性能。 2.使用场景及设计 2.1.使用场景 创建对象耗时又耗费资源时候可以使用。 2.2.设计 使用原型模式克隆对象时候又分为浅拷贝和深拷贝。 浅拷贝 只拷贝目标对象,不拷贝对象的成员属性。 深拷贝 拷贝目标对象,并且拷贝对象的成员属性 3.测试代码 此处测试浅拷贝,入口代码 package com.glt.designpatter...原创 2019-03-08 22:45:00 · 126 阅读 · 0 评论 -
设计模式-蝇量模式/享元模式
1.定义 以共享的方式高效的支持大量的细粒度对象,能够减少运行时对象实例的个数,节省内存。主要用于减少对象的创建,以节省内存提高性能。 2.使用场景及设计 2.1.使用场景 系统中需要大量类似的对象。例:需要展示100000个随机生成的坐标及其年龄。 2.2.设计 创建一个专门展示坐标及其年龄的对象,在使用一个manager类来创建所需要的对象。 3.测试代码 入口类 package com.gl...原创 2019-03-03 22:45:22 · 210 阅读 · 0 评论 -
设计模式-中介者模式
1.定义 使用中介者对象使其他对象之间相互解耦,每个对象只需要向中介者对象发出请求和接受请求即可 2.使用场景及设计 2.1.使用场景 房屋中介就是最好的例子,房屋中介使每个租客和房东之间相互解耦,都只需要接受中介的消息即可。 2.2.设计 类图如下: 3.测试代码 入口代码如下: package com.glt.designpattern.mediator; public class Ini...原创 2019-03-06 22:32:33 · 154 阅读 · 0 评论 -
设计模式-访问者模式
1.定义 当外部需要访问一个组合系统中所有对象的状态时,可以定义一个访问者类,通过访问者类访问组合系统中所有对象的状态,外部系统只需要对接访问者类即可获取到组合系统中所有对象的状态 2.使用场景及设计 2.1.使用场景 对象结构中对象对应的类很少改变,但经常需要在此对象结构上定义新的操作。 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作"污染"这些对象的类,也不希...原创 2019-03-09 17:55:16 · 183 阅读 · 0 评论 -
设计模式--状态模式
1.定义 允许对象在内部状态改变时改变它的行为,对象看起来好像是修改了它的类。 2.类图 3.状态模式与策略模式区别 状态模式与策略模式拥有相同的类图,都会事先定义好一组类(状态或行为) 状态模式会事先定义一组状态执行的顺序,类经过不同的状态时会有不同的行为,即通过状态的改变来控制类的行为 策略模式不会预先定义状态转换的顺序,通常是通过组合和委托来拥有不同的行为或算法 ...原创 2018-05-30 00:38:55 · 1250 阅读 · 0 评论 -
设计模式--策略模式
1.定义 定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于客户。 2.类图 3.测试代码 算法接口(抽象策略类) public interface Strategy { int operate(int a, int b); } 加法策略类 /** * 加法策略类 */ public class AddStrategy impleme...原创 2018-05-27 23:14:44 · 207 阅读 · 1 评论 -
设计模式--模板方法模式
1.定义 在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类能够在不改变算法结构的情况下,重新定义算法中的某些步骤。 2.模式特点 2.1.模式中的几个特点 此模式需要有个模板类(抽象类)来定义算法的主体结构,此结构中每一步骤则有子类来提供。模板类中的几个特点如下: 模板方法 定义了整体步骤的方法,通常设置为final类型,防止子类重写。 原语操作 ...原创 2018-05-27 14:56:15 · 259 阅读 · 0 评论 -
设计模式--单例模式
1.定义 确保一个类只有一个实例,并提供一个全局访问点。 2.实现单例的两种方式 2.1.实现单例需要注意三点: 私有构造器,保证只能在本类内部实例对象。 提供私有静态变量保存实例对象。 提供公有静态方法返回实例对象。 2.2.饿汉式 定义:饿汉式是在JVM加载类时候就实例化对象,后期每次调用返回的都是在加载类时候创建的对象。 缺点:加重程序在创建时候的负担,而且如果...原创 2018-05-10 13:47:00 · 179 阅读 · 0 评论 -
设计模式--装饰者模式
定义 使用组合和委托动态的将责任附加到对象上,如果要扩展功能,装饰者提供了比继承更有弹性的替代方案。 通俗来说,装饰者就是一些具有独特用途的小组件,它们依赖于一些基础组件并且具有基础组件的一切功能,而用户可以自己自由的选择不同的装饰者相互组合来实现复杂的多样的功能。 组合:我们先用一个图来简单解释下组合,还用最经典的咖啡来举例: 上图中“咖啡店”相当于抽象类(其中“价格”“描述”来自于...原创 2018-04-26 23:43:43 · 174 阅读 · 0 评论 -
设计模式--适配器模式
定义 将一个类的接口转换成客户期望的另一个接口,适配器让原本接口不兼容的类可以合作无间。原创 2018-05-18 00:08:28 · 163 阅读 · 0 评论 -
设计模式--外观模式
定义 提供一个统一接口用来访问子系统中的一群接口,外观定义了一个高层接口,让子系统更容易使用。原创 2018-05-18 22:13:29 · 168 阅读 · 1 评论 -
设计模式--工厂模式、抽象工厂模式
1.工厂模式 1.1.简单工厂 定义:定义一个类来实现各种对象的创建,这个类就是一个工厂,这种方式叫做简单工厂。 缺点:耦合性高,如果需要新增一种对象的创建,就需要修改工厂类。 使用方法: 1.2.静态工厂 定义:可以不使用创建对象(new Object())的方式实例化对象。 缺点:不能通过继承来改变创建方法(工厂)的行为。 使用方法: 1.3.工厂...原创 2018-05-07 00:17:29 · 213 阅读 · 0 评论 -
设计模式--迭代器模式
定义 迭代器模式依赖于一个迭代器接口,提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。原创 2018-05-25 00:28:35 · 213 阅读 · 0 评论 -
设计模式--组合模式
定义 允许你将对象组合成树形结构来表现“整体/部分”层次结构,组合能让客户以一致的方式处理个别对象以及对象组合。原创 2018-05-25 18:13:12 · 238 阅读 · 0 评论 -
设计模式--命令模式
定义 将请求封装成对象,一遍使用不同的请求、队列或者日志来参数化其他对象,也支持对其进行撤销。原创 2018-05-15 21:58:49 · 206 阅读 · 0 评论 -
设计模式-备忘录模式
1.定义 可以使对象可以返回到之前的状态,如撤销操作、或者学习系统上记住之前的学习状态等 2.使用场景及设计 2.1.使用场景 常用在系统中保存用户之前的状态及游戏的存档等。 2.2.设计 类图如下,其中Memento类用来保存状态,ManageMemento用来存取档,Client为客户端 3.测试代码 入口代码 package com.glt.designpattern.Memento; ...原创 2019-03-07 22:42:32 · 156 阅读 · 0 评论