随笔 - 1162
文章 - 0
评论 - 16
阅读 -
59万
02 2021 档案
第四节:解释器模式——总结
摘要:解释器模式的注意事项和细节 1、当有一个语言需要解释执行,可将该语言中的句子表示为一个抽象语法树,就可以考虑使用解释器模式,让程序具有更好的扩展性; 2、应用场景:编译器、运算表达式计算、正则表达式、机器人等; 3、使用解释器可能带来的问题:解释器模式会引起类膨胀、解释器模式才用递归调用方法,将会导
阅读全文
第三节:解释器模式——在Spring框架应用的源码剖析
摘要:一、解释器模式在Spring框架应用的源码剖析 1、Spring 框架中 SpelExpressionParser 就使用解释器模式 1 public class Interpreter { 2 public static void main(String[] args) { 3 //创建一个 Pa
阅读全文
第二节:解释器模式——基本介绍&应用
摘要:一、解释器模式基本介绍 1、基本介绍 (1)在编译原理中,一个算术表达式通过词法分析器形成词法单元,而后这些词法单元再通过语法分析器构建语法分析树,最终形成一颗抽象的语法分析树。这里的词法分析器和语法分析器都可以看做是解释器。 (2)解释器模式(Interpreter Pattern):是指给定一个
阅读全文
第一节:解释器模式——需求说明&传统实现
摘要:一、需求说明 四则运算问题: 通过解释器模式来实现四则运算,如计算 a+b-c 的值,具体要求: (1)先输入表达式的形式,比如 a+b+c-d+e,要求表达式的字母不能重复; (2)在分别输入 a,b,c,d,e 的值; (3)最后求出结果:如图 二、传统方案 1、传统实现 编写一个方法,接收表达
阅读全文
第四节:备忘录模式——总结
摘要:备忘录模式的注意事项和细节 1、给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态; 2、实现了信息的封装,使得用户不需要关心状态的保存细节; 3、如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存,这个需要注意; 4、适用的应用场景:(1)后
阅读全文
第三节:备忘录模式——游戏角色恢复状态实例
摘要:一、需求说明 1、应用实例要求 游戏角色有攻击力和防御力,在大战 Boss 前保存自身的状态(攻击力和防御力),当大战 Boss 后攻击力和防御力下降,从备忘录对象恢复到大战前的状态。 二、思路分析和图解 三、代码实现 备忘录对象: 1 public class Memento { 2 3 //攻击
阅读全文
第二节:备忘录模式——原理&应用
摘要:一、备忘录模式 1、基本介绍 (1)备忘录模式(Memento Pattern)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 (2)可以这里理解备忘录模式:现实生活中的备忘录是用来记录某些要去做的事情,或者是记录已经达成的共同
阅读全文
第一节:备忘录模式——需求说明&传统实现
摘要:一、需求说明 游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战 Boss 前保存自身的状态(攻击力和防御力),当大战 Boss 后攻击力和防御力下降,从备忘录对象恢复到大战前的状态。 二、传统实现 首先想到的可能就是来创建一个对象用来保存对象的状态。 三、传统的方式的问题分析 1、一个对象,就
阅读全文
第三节:中介者模式——总结
摘要:中介者模式的注意事项和细节 1、多个类相互耦合,会形成网状结构,使用中介者模式将网状结构分离为星型结构,进行解耦; 2、减少类间依赖,降低了耦合,符合迪米特原则; 3、中介者承担了较多的责任,一旦中介者出现了问题,整个系统就会受到影响; 4、如果设计不当,中介者对象本身变得过于复杂,这点在实际使用中
阅读全文
第二节:中介者模式——原理&应用
摘要:一、中介者模式基本介绍 1、基本介绍 (1)中介者模式(Mediator Pattern),用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互; (2)中介者模式属于行为型代码,使代码易于维护; (3)比如 MVC 模式,C
阅读全文
第一节:中介者模式——需求说明&传统实现
摘要:一、需求说明 智能家庭项目: 1、智能家庭包括各种设备,闹钟、咖啡机、电视机、窗帘等; 2、主人要看电视时,各个设备可以协同工作,自动完成看电视的准备工作,比如流程为:闹铃响起->咖啡机开始做咖啡->窗帘自动落下->电视机开始播放 二、传统方案解决智能家庭管理问题 三、传统的方式的问题分析 1、当各
阅读全文
第三节:观察者模式——JDK应用的源码分析
摘要:一、观察者模式在 JDK 应用的源码分析 1、JDK 的 Observable 类就使用了观察者模式 2、源码分析 Observable 通过 Vector 来管理 Observer 其中提供了 add/delete/notify 等方法来管理观察者; Observer 是一个接口,提供了一个 up
阅读全文
第二节:观察者模式——原理&应用
摘要:一、观察者模式(Observer)原理 1、观察者模式原理 观察者模式类似于订牛奶业务: (1)奶站/气象局:Subject; (2)用户/第三方网站:Observer Subject:登记注册、移除和通知 (1)registerObserver 注册 (2)removeObserver 移除 (3
阅读全文
第一节:观察者模式——需求说明&传统实现
摘要:一、需求说明 天气预报项目需求,具体要求如下: 1、气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去(比如发布到自己的网站或第三方) 2、需要设计开发型 API,便于其他第三方也能接入气象站获取数据; 3、提供温度、气压和湿度的接口; 4、测量数据更新时,要能实时的通知第三方; 二、
阅读全文
Java 多线程 之 创建线程的另外两种方式(JDK5.0新增)
摘要:一、创建线程新增方式一:实现 Callable 接口 1、Callable概述 与使用 Runnable 相比,Callable 功能更强大些 ① 相比 run() 方法,可以有返回值; ② 方法可以抛出异常; ③ 支持泛型的返回值; ④ 需要借助 FutureTask 类,比如获取返回结果; 2、
阅读全文
Java 多线程 之 线程通信
摘要:一、线程间通信 概念:多个线程在处理同一资源,但是处理的动作(线程的任务)却不相同。 例如:使用两个线程打印 1-100。线程1, 线程2 交替打印,怎么实现呢? 为什么要处理线程间通信: 多个线程并发执行,在默认情况下CPU是随机切换线程的,当我们需要多个线程来共同完成同一件任务,并且希望它们有规
阅读全文
Java 多线程 之 线程的同步机制
摘要:一、线程的安全问题 1、问题的发现 当有多个线程同时运行,而这些线程可能会同时运行这段代码。程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,这就是线程安全的。 下面通过一个案例来演示线程的安全问题。 模拟电影票买票的过程,其中,一共有100张票。下面来模拟电影票的售
阅读全文
Java 多线程 之 线程的生命周期
摘要:一、线程的状态 JDK 中用 Thread.State 类定义了线程的几种状态: 当线程被创建并启动以后,并没有直接进入执行状态,还有其他的状态。 在线程的生命周期中, java.lang.Thread.State 这个枚举中给出了六种线程状态: 线程之间的状态转换: 二、线程的生命周期 想要实现多
阅读全文
Java 多线程 之 线程的创建和使用
摘要:一、主线程 主线程:执行主(main)方法的线程 单线程程序:java程序中只有一个线程,执行从main方法开始,从上到下依次执行 下面这个只有一个 main 线程,并不是多线程 二、线程的创建和启动 1、线程的创建 (1)Java 语言的 JVM 允许程序运行多个线程,它通过 java.lang.
阅读全文
Java 多线程 之 基本概念:程序、进程、线程
摘要:一、基本概念 1、程序 程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,是静态对象。 2、进程 进程(process)是程序的一次执行过程,或是正在运行的一个程序。 是一个动态的过程:有它自身的产生、存在和消亡的过程 如:运行中的微信、QQ、运行中的 MP
阅读全文
第四节:迭代器模式——总结
摘要:迭代器模式的注意事项和细节 优点: 1. 提供一个统一的方法遍历对象,客户不用再考虑聚合的类型,使用一种方法就可以遍历对象了。 2. 隐藏了聚合的内部结构,客户端要遍历聚合的时候只能取到迭代器,而不会知道聚合的具体组成; 3. 提供了一种设计思想,就是一个类应该只有一个引起变化的原因(叫做单一责任原
阅读全文
第三节:迭代器模式——JDK中集合应用的源码分析
摘要:迭代器模式在 JDK-ArrayList 集合应用的源码分析 1、JDK 的 ArrayList 集合中就使用了迭代器模式; 2、代码分析: 1 public class IteratorTest { 2 3 public static void main(String[] args) { 4 Li
阅读全文
第二节:迭代器模式——迭代器模式应用
摘要:一、应用实例 1、应用实例要求 编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个院系。 2、设计思路分析 二、代码实现 院系类:Element 即容器中存放的,需要来遍历的单位 1 /** 2 * 院系 3 */ 4 public cl
阅读全文
第一节:迭代器模式——需求说明&基本介绍
摘要:一、需求说明 编写程序展示一个学校院系结构:需求是这样的,要在一个页面中展示学校的院系组成,一个学校有多个学院,一个学院有多个系。 如图: 二、使用传统的设计方案 1、传统的设计方案(类图) 2、传统方式的问题分析 (1)将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的
阅读全文
第四节:访问者模式——总结
摘要:访问者模式的注意事项和细节 优点: 1、访问者模式符合单一职责原则,让程序具有优秀的扩展性、灵活性非常高; 2、访问者模式可以对功能进行统一,可以做报表、UI、拦截器与过滤器,适用于数据结构相对稳定的系统; 缺点: 1、具体元素对访问者公布细节,也就是说访问者关注了其他类的内部细节,这是迪米特法则所
阅读全文
第三节:访问者模式——分派
摘要:应用案例小结——双分派: 上面的应用提及了双分派,所谓双分派是指不管类怎么变化,我们都能找到期望的方法运行。双分派意味着得到执行的操作取决于请求的种类和两个接收者的类型。 在上一节的案例中,假设我们要添加一个 Wait 的状态类,考察 Man 类和 Woman 类的反应,由于使用了双分派,只需要增加
阅读全文
第二节:访问者模式——访问者模式应用实例
摘要:一、访问者模式应用实例 1、应用实例要求 将人分为男人和女人,对歌手进行测评,当看完某个歌手表演后,得到他们对该歌手不同的评价(评价有不同种类:比如成功、失败),使用访问者模式完成实现。 2、思路分析和图解 二、代码实现 抽象访问者: 1 /** 2 * 访问者 3 */ 4 public abst
阅读全文
第一节:访问者模式——需求说明&基本介绍
摘要:一、需求说明 完成测评系统需求 需求说明:将观众分为男人和女人,对歌手进行测评,当看完某个歌手表演后,得到他们对该歌手不同的评价(评价有不同的种类,如成功、失败等) 二、传统方案 1、传统实现 抽象一个父类 Person,下面有其具体的多个实现类,然后根据不同评价给出不同的结果。 2、传统方式的问题
阅读全文
第四节:命令模式——总结
摘要:命令模式的注意事项和细节 1、将发起请求的对象与执行请求的对象解耦。发起请求的对象是调用者,调用者只要调用命令对象的 execute() 方法就可以让接收者工作,而不必知道具体的接收者对象是谁、是如何实现的,命令对象会负责让接收者执行请求的动作,也就是说:“请求发起者” 和 “请求执行者”之间的解耦
阅读全文
第三节:命令模式——在Spring框架应用
摘要:命令模式在 Spring 框架 JdbcTemplate 应用的源码分析 1、Spring 框架的 JdbcTemplate 就使用到了命令模式 2、代码分析: 3、模式角色分析说明 (1)StatementCallBack 接口,类似命令接口(Command) (2)class QueryStat
阅读全文
第二节:命令模式——应用
摘要:一、命令模式解决智能生活项目 1、编写程序,使用命令模式,完成前面的智能家电项目; 2、思路分析和图解 二、代码实现 执行者,被调用者: 1 /** 2 * 执行者,被调用者 3 */ 4 public class LightReceiver { 5 6 public void on() { 7 S
阅读全文
第一节:命令模式——需求说明&基本介绍
摘要:一、需求说明 1、我们买了一套智能家电,有照明灯、风扇、冰箱、洗衣机,我们只要在手机上安装 APP 就可以控制对这些家电工作; 2、这些智能家电来自不同的厂家,我们不想针对每一种家电都安装一个 APP,分别控制,我们希望只要一个 APP 就可以控制全部智能家电; 3、要实现一个 APP 控制所有智能
阅读全文
第四节:模板模式——总结
摘要:模板方法模式的注意事项和细节 1、基本思想是:算法只存在于一个地方,也就说在父类中,容易修改。需要修改算法时,只要修改父类的模板方法或者已经实现的某些步骤,子类就会继承这些继承; 2、实现了最大化代码复用。父类的模板方法和已实现步骤会被子类继承而直接使用; 3、即统一了算法,也提供了很大的灵活性。父
阅读全文
第三节:模板模式——在Spring框架应用
摘要:模板模式在Spring框架应用的源码分析 1、Spring IOC 容器初始化时运用到的模板方法模式 2、流程 3、类图
阅读全文
第二节:模板模式——模板模式应用
摘要:一、需求分析 1、应用实例要求 编写制作豆浆的程序,说明如下: 制作豆浆的流程:选材——>添加配料——>浸泡——>放到豆浆机打碎 通过添加不同的配料,可以制作出不同口味的豆浆 选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的(红豆豆浆、花生豆浆...) 2、分析与类图 二、代码实
阅读全文
第一节:模板模式——需求说明&基本介绍
摘要:一、需求说明 编写制作豆浆的程序,说明如下: (1)制作豆浆的过程:选材 ——>添加配料 ——>浸泡——>放到豆浆机打碎 (2)通过添加不同的配料,可以制作不同口味的豆浆 (3)选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的 (4)使用模板方法完成 二、模板方法模式基本介绍 1
阅读全文
第五节:代理模式——代理模式的变体
摘要:几种常见的代理模式介绍——几种变体 1、防火墙代理 内网通过代理穿透防火墙,实现对公网的访问; 2、缓存代理 比如:当请求图片文件等资源时,仙道缓存代理取,如果取到资源则 OK,如果取不到资源,再到公网或者数据库取,然后缓存下来。 3、远程代理 远程对象的本地代表,通过它可以把远程对象当本地对象来调
阅读全文
第四节:代理模式——cglib代理
摘要:一、Cglib 代理模式的基本介绍 1、静态代理和 JDK 代理模式都要求目标对象是实现一个接口,但是有时候目标对象只是一个单独的对象,并没有实现任何的接口,这个时候可使用目标对象子类来实现代理,这就是 Cglib 代理。 2、Cglib 代理也叫作子类代理,它是在内存中构建一个子类对象从而实现对目
阅读全文
第三节:代理模式——动态代理
摘要:一、动态代理模式的基本介绍 1、代理对象,不需要实现接口,但是目标对象要实现接口,否则不能动态代理; 2、代理对象的生成,是利用 JDK 的 API,动态的在内存中构建代理对象; 3、动态代理也叫做:JDK 代理、接口代理 4、实现步骤 (1)代理对象和真实对象实现相同的接口; (2)代理对象 =
阅读全文
第二节:代理模式——静态代理
摘要:一、静态代理 1、静态代理在使用时,需要定义接口或者父类,被代理对象(即目标对象)与代理对象一起实现相同的接口或者是继承相同父类。 二、应用实例 1、具体要求 (1)定义一个接口:ITeacherDAO (2)目标对象 TeacherDAO 实现接口 ITeacherDAO (3)使用静态代理方式,
阅读全文
第一节:代理模式——基本介绍
摘要:一、代理模式的基本介绍 1、代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象,这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能; 代理模式:代理对象代理真实对象,达到增强真实对象功能的目的 真实对象:被代理的对象 代理对象:代理
阅读全文