随笔 - 1162
文章 - 0
评论 - 16
阅读 -
59万
随笔分类 - 设计模式2
单例模式(2)
摘要:一、单例模式 单例模式无论在我们面试,还是日常工作中,都会面对的问题。但很多单例模式的细节,值得我们深入探索一下。 这篇文章透过单例模式,串联了多方面基础知识,非常值得一读。 二、什么是单例模式? 单例模式是一种非常常用的软件设计模式,它定义是单例对象的类只能允许一个实例存在。 该类负责创建自己的对
阅读全文
第四节:职责链模式——总结
摘要:职责链模式的注意事项和细节 1、将请求和处理分开,实现解耦,提高系统的灵活性; 2、简化了对象,使对象不需要知道链的结构; 3、性能会受到影响,特别是在链比较长的时候,因此需控制链中最大节点数量,一般通过在Handler 中设置一个最大节点数量,在 setNext() 方法中判断是否已经超过阈值,超
阅读全文
第三节:职责链模式——在SpringMVC源码分析
摘要:一、职责链模式在 SpringMVC 框架应用的源码分析 1、SpringMVC—HandlerExecutionChain 类就使用到职责链模式 2、SpringMVC 请求流程简图 3、代码分析&说明 代码: 1 public class ResponsibilityChainTest { 2
阅读全文
第二节:职责链模式——基本介绍&应用
摘要:一、职责链模式 1、基本介绍 (1)职责链模式(Chain of Responsibility Pattern),又叫责任链模式,为请求创建了一个接收者对象的链(简单示意图)。这种模式对请求的发送者和接受者进行解耦。 (2)职责链模式通常每个接收者对象都包含对另一个接收者的引用。如果一个对象不能处理
阅读全文
第一节:职责链模式——需求说明&传统实现
摘要:一、需求说明 学校 OA 系统的采购审批项目:需求是: 采购员采购教学器材: 1、如果金额 小于等于 5000,由教学主任审批(0 <= x <= 5000) 2、如果金额 小于等于 10000,由院长审批(5000 <= x <= 10000) 3、如果金额 小于等于 30000,由副校长审批(1
阅读全文
第四节:策略模式——总结
摘要:策略模式的注意事项和细节 1、策略模式的关键是:分析项目中变化部分与不变部分; 2、策略模式的核心思想是:多用组合/聚合,少用继承; 用行为类组合,而不是行为的继承,使结构更有弹性; 3、体现了 “对修改关闭,对扩展开放”原则,客户端增加行为不用修改原有代码,只要添加一种策略(或者行为)即可,避免了
阅读全文
第三节:策略模式——JDK-Arrays的源码分析
摘要:一、策略模式在 JDK-Arrays 应用的源码分析 1、JDK 的 Arrays 的 Comparator 就使用了策略模式 2、代码 1 public class StrategyTest { 2 public static void main(String[] args) { 3 Intege
阅读全文
第二节:策略模式——基本介绍&应用
摘要:一、策略模式 1、基本介绍 (1)策略模式(Strategy Pattern)中,定义算法族(策略组),分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户; (2)这算法体现了几个设计原则: 第一:把变化的代码从不变的代码中分离出来; 第二:针对接口编程而不是具体类(定义了
阅读全文
第一节:策略模式——需求说明&传统实现
摘要:一、需求说明 1、有各种鸭子(比如 野鸭、北京鸭、水鸭等,鸭子有各种行为,比如 叫、飞行等) 2、显示鸭子的信息 二、传统方案解决鸭子问题的分析和代码实现 1、传统的设计方案(类图) 2、代码 抽象鸭子类: 1 public abstract class Duck { 2 public Duck()
阅读全文
第四节:状态模式——总结
摘要:一、状态模式的注意事项和细节 1、代码有很强的可读性。状态模式将每个状态的行为封装到对应的一个类中。 2、方便维护。将容易产生问题的 if-else 语句删除了,如果把每个状态的行为都放到一个类中,每次调用方法时都要判断当前是什么状态,不但会产出很多if-else语句,而且容易出错。 3、符合 “开
阅读全文
第三节:状态模式——订单审批流程分析
摘要:一、借贷平台代码分析 1、借贷平台的订单,有审核-发布-抢单 等步骤,随着操作的不同,会改变订单的状态,项目中的这个模块实现就会使用到状态模式; 2、通常使用 if/else 判断订单的状态,从而实现不同的逻辑,伪代码如下: 二、代码分析 1、类图 2、代码 状态接口类: 1 /** 2 * 状态接
阅读全文
第二节:状态模式——基本介绍&应用
摘要:一、状态模式基本介绍 1、基本介绍 (1)状态模式(State Pattern):它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换; (2)当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类; 2、状态模式的原理类图
阅读全文
第一节:状态模式——需求说明
摘要:一、需求说明 APP 抽奖活动问题 请编写程序完成 APP 抽奖活动,具体要求如下: 1、假如每参加一次这个活动要扣除用户 50积分,中奖概率是 10%; 2、奖品数量固定,抽完不能抽奖; 3、活动有四个状态:可以抽奖、不能抽奖、发放奖品和奖品领完; 4、活动的四个状态转换关系图如下:
阅读全文
第四节:解释器模式——总结
摘要:解释器模式的注意事项和细节 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)可以这里理解备忘录模式:现实生活中的备忘录是用来记录某些要去做的事情,或者是记录已经达成的共同
阅读全文