随笔分类 - 算法与设计 / 设计模式
摘要:SpringMVC-HandlerExecutionChain 类就使用到职责链模式 public class DispatcherServlet extends FrameworkServlet { protected void doDispatch(HttpServletRequest requ
阅读全文
摘要:问题描述 编写程序完成学校OA系统的采购审批项目 • 采购员采购教学器材 • 如果金额 小于等于5000, 由教学主任审批 • 如果金额 小于等于10000, 由院长审批 • 如果金额 小于等于30000, 由副校长审批 • 如果金额 超过30000以上,有校长审批 方案类图 代码实现 packag
阅读全文
摘要:问题描述 1) 采购员采购教学器材 2) 如果金额 小于等于5000, 由教学主任审批 (0<=x<=5000) 3) 如果金额 小于等于10000, 由院长审批 (5000<x<=10000) 4) 如果金额 小于等于30000, 由副校长审批 (10000<x<=30000) 5) 如果金额 超
阅读全文
摘要:JDK的 Arrays 的Comparator就使用了策略模式 public class Strategy { public static void main(String[] args) { Integer[] data = { 9,1,2,8,4,3 }; // 实现升序排序,返回-1放左边,1
阅读全文
摘要:简介 1) 策略模式(Strategy Pattern)中,定义算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 2) 这算法体现了几个设计原则,第一、把变化的代码从不变的代码中分离出来;第二、针对接口编程而不是具体类(定义了策略接口);第三、多用组合/聚合, 少
阅读全文
摘要:问题描述 1) 有各种鸭子(比如 野鸭、北京鸭、水鸭等, 鸭子有各种行为,比如 叫、飞行等) 2) 显示鸭子的信息 问题类图 代码实现 package com.atguigu.strategy; public abstract class Duck { public Duck() { } publi
阅读全文
摘要:借贷平台的订单,有审核-发布-抢单 等等 步骤,随着操作的不同,会改变订单的状态, 项目中的这个模块实现就会使用到状态模式 通过if/else判断订单的状态,从而实现不同的逻辑 if(审核){ //审核逻辑 }elseif(发布){ //发布逻辑 }elseif(接单){ //接单逻辑 } 这类代码
阅读全文
摘要:实现方案 定义出一个接口叫状态接口,每个状态都实现它 接口有扣除积分方法、抽奖方法、发放奖品方法 实现类图 实现代码 package com.atguigu.state; /** * 状态抽象类 */ public abstract class State { // 扣除积分 - 50 public
阅读全文
摘要:APP抽奖问题 1) 假如每参加一次这个活动要扣除用户50积分,中奖概率是10% 2) 奖品数量固定,抽完就不能抽奖 3) 活动有四个状态: 可以抽奖、不能抽奖、发放奖品和奖品领完 4) 活动的四个状态转换关系图 状态模式简介 1) 状态模式(State Pattern):它主要用来解决对象在多种状
阅读全文
摘要:Spring框架中SpelExpressionParser使用到了解释器模式 public class Interpreter { public static void main(String[] args) { SpelExpressionParser parser = new SpelExpre
阅读全文
摘要:案例类图 代码实现 package com.atguigu.interpreter; import java.util.HashMap; /** * 抽象类表达式,通过HashMap 键值对, 可以获取到变量的值 */ public abstract class Expression { // a
阅读全文
摘要:通过解释器模式来实现四则运算,如计算a+b-c的值 1) 先输入表达式的形式,比如 a+b+c-d+e, 要求表达式的字母不能重复 2) 在分别输入a ,b, c, d, e 的值 3) 最后求出结果 传统方案解决四则运算问题 1) 编写一个方法,接收表达式的形式,然后根据用户输入的数值进行解析,得
阅读全文
摘要:问题需求 游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状态 代码实现 package com.atguigu.memento.game; public class Memento { //攻击力 priva
阅读全文
摘要:游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状态 传统解决方案:1个游侠角色对应1个状态 方案分析 1) 一个对象,就对应一个保存对象状态的对象, 这样当我们游戏的对象很多时,不利于管
阅读全文
摘要:方案类图 代码实现 package com.atguigu.mediator.smarthouse; //同事抽象类 public abstract class Colleague { private Mediator mediator; public String name; public Col
阅读全文
摘要:智能家电问题 1) 智能家庭包括各种设备,闹钟、咖啡机、电视机、窗帘 等 2) 主人要看电视时,各个设备可以协同工作,自动完成看电视的准备工作,比如流程为:闹铃响起->咖啡机开始做咖啡->窗帘自动落下->电视机开始播放 传统解决方案 闹钟通知TV和咖啡机 咖啡机通知电视机和窗帘 各种设备相互通知 传
阅读全文
摘要:查看 @Deprecated(since="9") public class Observable { private boolean changed = false; private Vector<Observer> obs; // 集合 # 查看接口 @Deprecated(since="9")
阅读全文
摘要:简介 观察者模式类似订牛奶业务 1) 奶站/气象局:Subject 2) 用户/第三方网站:Observer Subject:登记注册、移除和通知 1) registerObserver 注册 2) removeObserver 移除 3) notifyObservers() 通知所有的注册的用户,
阅读全文
摘要:天气预报问题 1) 气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去(比如发布到自己的网站或第三方)。 2) 需要设计开放型API,便于其他第三方也能接入气象站获取数据。 3) 提供温度、气压和湿度的接口 4) 测量数据更新时,要能实时的通知给第三方 传统方案 0) 设计出一个Wea
阅读全文
摘要:JDK的ArrayList 集合中就使用了迭代器模式 public class IteratorPattern { @SuppressWarnings("rawtypes") public static void main(String[] args) { // TODO Auto-generate
阅读全文