
设计模式学习
设计模式,java提高,可以增加自己的代码规范。
计忆芳华
一个2017年入坑的java小白。
个人博客:jiyifh.top。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【大话设计模式-25】职责链模式(案例解析)
文章目录1 学校 OA 系统的采购审批项目2 传统方案解决 OA 系统审批,传统的设计方案(类图)3 传统方案解决 OA 系统审批问题分析4 职责链模式基本介绍5 职责链模式的原理类图6 职责链模式解决 OA 系统采购审批7 职责链模式在 SpringMVC 框架应用的源码分析8 职责链模式的注意事项和细节1 学校 OA 系统的采购审批项目需求是:采购员采购教学器材如果金额 小于等于 5000, 由教学主任审批 (0<=x<=5000)如果金额 小于等于 10000, 由院长审批 (5原创 2020-07-29 10:56:21 · 570 阅读 · 0 评论 -
【大话设计模式-24】策略模式(案例解析)
文章目录1 编写鸭子项目,具体要求如下2 传统方案解决鸭子问题的分析和代码实现3 传统的方式实现的问题分析和解决方案4 策略模式基本介绍5 策略模式的原理类图6 策略模式解决鸭子问题7 策略模式在 JDK-Arrays 应用的源码分析8 策略模式的注意事项和细节1 编写鸭子项目,具体要求如下有各种鸭子(比如 野鸭、北京鸭、水鸭等, 鸭子有各种行为,比如 叫、飞行等)显示鸭子的信息2 传统方案解决鸭子问题的分析和代码实现传统的设计方案(类图)代码实现package com.a原创 2020-07-28 21:10:50 · 434 阅读 · 0 评论 -
【大话设计模式-23】状态模式(案例解析)
文章目录1 APP 抽奖活动问题2 状态模式基本介绍3 状态模式的原理类图4 状态模式解决 APP 抽奖问5 状态模式在实际项目-借贷平台 源码剖析6 状态模式的注意事项和细节1 APP 抽奖活动问题请编写程序完成 APP 抽奖活动 具体要求如下:假如每参加一次这个活动要扣除用户 50 积分,中奖概率是 10%奖品数量固定,抽完就不能抽奖活动有四个状态: 可以抽奖、不能抽奖、发放奖品和奖品领完活动的四个状态转换关系图(右图)2 状态模式基本介绍基本介绍状态模式(State Patt原创 2020-07-28 16:48:56 · 264 阅读 · 0 评论 -
【大话设计模式-22】解释器模式(案例解析)
文章目录1 四则运算问题2 传统方案解决四则运算问题分析3 解释器模式基本介绍4 解释器模式的原理类图5 解释器模式来实现四则6 解释器模式在 Spring 框架应用的源码剖析7 解释器模式的注意事项和细节1 四则运算问题通过解释器模式来实现四则运算,如计算 a+b-c 的值,具体要求先输入表达式的形式,比如 a+b+c-d+e, 要求表达式的字母不能重复在分别输入 a ,b, c, d, e 的值最后求出结果:如图2 传统方案解决四则运算问题分析编写一个方法,接收表达式的形式,然后根原创 2020-07-27 21:27:05 · 373 阅读 · 0 评论 -
【大话设计模式-21】备忘录模式(案例解析)
文章目录1 游戏角色状态恢复问题2 传统方案解决游戏角色恢复3 传统的方式的问题分析4 备忘录模式基本介绍5 备忘录模式的原理类图1 游戏角色状态恢复问题游戏角色有攻击力和防御力,在大战 Boss 前保存自身的状态(攻击力和防御力),当大战 Boss 后攻击力和防御力下降,从备忘录对象恢复到大战前的状态2 传统方案解决游戏角色恢复3 传统的方式的问题分析一个对象,就对应一个保存对象状态的对象, 这样当我们游戏的对象很多时,不利于管理,开销也很大.传统的方式是简单地做备份,new 出另外一个对原创 2020-07-27 16:48:41 · 523 阅读 · 0 评论 -
【大话设计模式-20】中介者模式(案例解析)
文章目录1 智能家庭项目2 传统方案解决智能家庭管理问题3 传统的方式的问题分析4 中介者模式基本介绍5 中介者模式的原理类图6 中介者模式应用实例-智能家庭管理7 中介者模式的注意事项和细节1 智能家庭项目智能家庭包括各种设备,闹钟、咖啡机、电视机、窗帘 等主人要看电视时,各个设备可以协同工作,自动完成看电视的准备工作,比如流程为:闹铃响起->咖啡机开始做咖啡->窗帘自动落下->电视机开始播放2 传统方案解决智能家庭管理问题3 传统的方式的问题分析当各电器对象有多原创 2020-07-27 16:11:07 · 1095 阅读 · 0 评论 -
【大话设计模式-19】观察者模式模式(案例解析)
文章目录1 天气预报项目需求,具体要求如下:2 天气预报设计方案 1-普通方案2.1 WeatherData 类2.2 代码实现2.3 问题分析3 观察者模式原理4 观察者模式解决天气预报需求4.1 类图说明4.2 代码实现4.3 观察者模式的好处5 观察者模式在 Jdk 应用的源码分析1 天气预报项目需求,具体要求如下:气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去(比如发布到自己的网站或第三方)。需要设计开放型 API,便于其他第三方也能接入气象站获取数据。提供温度、气压和湿原创 2020-07-26 20:03:54 · 383 阅读 · 0 评论 -
【大话设计模式-18】迭代器模式(案例解析)
文章目录1 看一个具体的需求2 传统的设计方案(类图)3 传统的方式的问题分析4 迭代器模式基本介绍5 迭代器模式的原理类图6 迭代器模式应用实例7 迭代器模式在 JDK-ArrayList 集合应用的源码分析8 迭代器模式的注意事项和细节1 看一个具体的需求编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。如图:2 传统的设计方案(类图)3 传统的方式的问题分析将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小原创 2020-07-26 16:49:13 · 1620 阅读 · 0 评论 -
【大话设计模式-17】访问者模式(双分派案例解析)
文章目录1 测评系统的需求2 传统方式的问题分析3 访问者模式基本介绍4 访问者模式的原理类图5 访问者模式应用实例6 访问者模式的注意事项和细节1 测评系统的需求完成测评系统需求将观众分为男人和女人,对歌手进行测评,当看完某个歌手表演后,得到他们对该歌手不同的评价(评价 有不同的种类,比如 成功、失败 等)传统方案2 传统方式的问题分析如果系统比较小,还是 ok 的,但是考虑系统增加越来越多新的功能时,对代码改动较大,违反了 ocp 原则, 不利于维护扩展性不好,比如 增加了 新的人原创 2020-07-25 21:17:41 · 293 阅读 · 0 评论 -
【大话设计模式-16】命令模式(案例解析)
1 智能生活项目需求看一个具体的需求我们买了一套智能家电,有照明灯、风扇、冰箱、洗衣机,我们只要在手机上安装 app 就可以控制对这些家电工作。这些智能家电来自不同的厂家,我们不想针对每一种家电都安装一个 App,分别控制,我们希望只要一个 app就可以控制全部智能家电。要实现一个 app 控制所有智能家电的需要,则每个智能家电厂家都要提供一个统一的接口给 app 调用,这时 就可以考虑使用命令模式。命令模式可将“动作的请求者”从“动作的执行者”对象中解耦出来. 5) 在我们的例子中,动作的请原创 2020-07-25 15:36:16 · 522 阅读 · 0 评论 -
【大话设计模式-15】模板方法模式(普通方法与钩子方法案例解析)
文章目录1 豆浆制作问题2 模板方法模式基本介绍3 模板方法模式原理类图3.1 模板方法模式的原理类图4 模板方法模式解决豆浆制作问题5 模板方法模式的钩子方法6 模板方法模式在 Spring 框架应用的源码分析7 模板方法模式的注意事项和细节1 豆浆制作问题编写制作豆浆的程序,说明如下:制作豆浆的流程 选材—>添加配料—>浸泡—>放到豆浆机打碎通过添加不同的配料,可以制作出不同口味的豆浆选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的请使用 模板方法模式原创 2020-07-24 22:04:56 · 441 阅读 · 0 评论 -
【大话设计模式-14】代理模式(三种代理模式案例解析)
文章目录1 代理模式(Proxy)1.1 代理模式的基本介绍2 静态代理2.1 静态代码模式的基本介绍2.2 应用实例2.3 静态代理优缺点3 动态代理3.1 动态代理模式的基本介绍3.2 JDK 中生成代理对象的 API3.3 动态代理应用实例4 Cglib 代理4.1 Cglib 代理模式的基本介绍4.2 Cglib 代理模式实现步骤4.3 Cglib 代理模式应用实例5 几种常见的代理模式介绍— 几种变体1 代理模式(Proxy)1.1 代理模式的基本介绍代理模式:为一个对象提供一个替身,以控原创 2020-07-24 21:10:49 · 443 阅读 · 0 评论 -
【大话设计模式-13】享元模式(案例解析)
1 展示网站项目需求小型的外包项目,给客户 A 做一个产品展示网站,客户 A 的朋友感觉效果不错,也希望做这样的产品展示网站,但是要求都有些不同:有客户要求以新闻的形式发布有客户人要求以博客的形式发布有客户希望以微信公众号的形式发布2 传统方案解决网站展现项目直接复制粘贴一份,然后根据客户不同要求,进行定制修改给每个网站租用一个空间方案设计示意图3 传统方案解决网站展现项目-问题分析需要的网站结构相似度很高,而且都不是高访问量网站,如果分成多个虚拟空间来处理,相当于一个相同网原创 2020-07-24 17:12:14 · 1099 阅读 · 1 评论 -
【大话设计模式-12】外观模式(案例解析)
1 影院管理项目组建一个家庭影院:DVD 播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成使用家庭影院的功能,其过程为:直接用遥控器:统筹各设备开关开爆米花机放下屏幕开投影仪开音响开 DVD,选 dvd去拿爆米花调暗灯光播放观影结束后,关闭各种设备2 传统方式解决影院管理3 传统方式解决影院管理问题分析在 ClientTest 的 main 方法中,创建各个子系统的对象,并直接去调用子系统(对象)相关方法,会造成调用过程混乱,没有清晰的过程不利于在 ClientT原创 2020-07-24 10:50:59 · 418 阅读 · 0 评论 -
【大话设计模式-11】组合模式(案例解析)
1 看一个学校院系展示需求编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。如图:2 传统方案解决学校院系展示(类图)3 传统方案解决学校院系展示存在的问题分析将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的实际上我们的要求是 :在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系, 因此这种方案,不能很好实现的管理的操作,比如对学院、系的添加,删除,遍历等解决方案:把学校、原创 2020-07-23 17:22:39 · 1074 阅读 · 0 评论 -
【大话设计模式-10】装饰者设计模式(案例解析)
1 星巴克咖啡订单项目(咖啡馆):咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡)调料:Milk、Soy(豆浆)、Chocolate要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便使用 OO 的来计算不同种类咖啡的费用: 客户可以点单品咖啡,也可以单品咖啡+调料组合。2 方案 1-解决星巴克咖啡订单项目3 方案 1-解决星巴克咖啡订单问题分析Drink 是一个抽象类,表示饮料des 就是对原创 2020-07-23 14:59:10 · 318 阅读 · 0 评论 -
【大话设计模式-9】桥接模式(案例解析)
1 手机操作问题现在对不同手机类型的不同品牌实现操作编程(比如:开机、关机、上网,打电话等),如图:2 传统方案解决手机操作问题传统方法对应的类图3 传统方案解决手机操作问题分析扩展性问题(类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各个品牌手机的类,同样如果我们增加一个手机品牌,也要在各个手机样式类下增加。违反了单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这样增加了代码维护成本.解决方案-使用桥接模式4 桥接模式(Bridge)-基本介绍桥接模式(原创 2020-07-23 11:10:58 · 490 阅读 · 0 评论 -
【大话设计模式-8】适配器设计模式(三类适配器案例解析)
文章目录1 现实生活中的适配器例子2 基本介绍3 工作原理4 类适配器模式4.1类适配器模式介绍4.2类适配器模式应用实例4.3类适配器模式注意事项和细节5 对象适配器模式5.1对象适配器模式介绍5.2对象适配器模式应用实例5.3对象适配器模式注意事项和细节6 接口适配器模式6.1接口适配器模式介绍6.2接口适配器模式应用实例7 适配器模式在 SpringMVC 框架应用的源码剖析8 适配器模式的注意事项和细节1 现实生活中的适配器例子泰国插座用的是两孔的(欧标),可以买个多功能转换插头 (适配器) ,原创 2020-07-22 23:41:09 · 387 阅读 · 0 评论 -
【大话设计模式-7】建造者模式
文章目录1. 盖房项目需求2. 传统方式解决盖房需求3. 传统方式的问题分析4. 建造者模式基本介绍5. 建造者模式的四个角色6. 建造者模式原理类图7. 建造者模式解决盖房需求应用实例8. 建造者模式在 JDK 的应用和源码分析9. 建造者模式的注意事项和细节1. 盖房项目需求需要建房子:这一过程为打桩、砌墙、封顶房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的.请编写程序,完成需求2. 传统方式解决盖房需求思路分析(图解)代码的演示packa原创 2020-07-22 20:20:11 · 248 阅读 · 0 评论 -
【大话设计模式-6】原型模式(浅拷贝、深拷贝案例分析)
文章目录1. 克隆羊问题2. 传统方式解决克隆羊问题3. 传统的方式的优缺点4. 原型模式-基本介绍5. 原型模式原理结构图-uml 类图6. 原型模式解决克隆羊问题的应用实例7. 原型模式在 Spring 框架中源码分析8. 深入讨论-浅拷贝和深拷贝8.1 浅拷贝的介绍8.2 深拷贝基本介绍9. 深拷贝应用实例10. 原型模式的注意事项和细节1. 克隆羊问题现在有一只羊 tom,姓名为: tom, 年龄为:1,颜色为:白色,请编写程序创建和 tom 羊 属性完全相同的 10只羊。2. 传统方式解决克原创 2020-07-22 13:12:28 · 346 阅读 · 0 评论 -
【大话设计模式-5】工厂模式(三种工厂模式代码案例分析)
1. 简单工厂模式1.1 看一个具体的需求看一个披萨的项目:要便于披萨种类的扩展,要便于维护披萨的种类很多(比如 GreekPizz、CheesePizz 等)披萨的制作有 prepare,bake, cut, box完成披萨店订购功能。1.2 使用传统的方式来完成思路分析(类图)代码的演示public abstract class Pizza { protected String name; public abstract void prepare(); publ原创 2020-07-21 22:10:55 · 300 阅读 · 0 评论 -
【大话设计模式-4】单例设计模式(八种方式代码案例分析)
文章目录1. 单例设计模式介绍2. 单例设计模式八种方式3. 饿汉式(静态常量)4. 饿汉式(静态代码块)5. 懒汉式(线程不安全)6. 懒汉式(线程安全,同步方法)7. 懒汉式(线程安全,同步代码块)8. 双重检查9. 静态内部类10. 枚举11. 单例模式在 JDK 应用的源码分析12. 单例模式注意事项和细节说明原创 2020-07-21 15:37:30 · 267 阅读 · 0 评论 -
【大话设计模式-3】设计模式概述
文章目录1. 设计模式介绍2. 设计模式类型原创 2020-07-20 22:12:42 · 279 阅读 · 0 评论 -
【大话设计模式-2】UML 类图的绘制(源码案例分析)
文章目录1 UML 基本介绍2 UML 图3 UML 类图4 类图—依赖关系(Dependence)5 类图—泛化关系(generalization)6 类图—实现关系(Implementation)7 类图—关联关系(Association)8 类图—聚合关系(Aggregation)9 类图—组合关系(Composition)原创 2020-07-20 21:59:30 · 1792 阅读 · 0 评论 -
【大话设计模式-1】设计模式七大原则(代码案例讲解)
文章目录设计模式七大原则1. 单一职责原则1.1应用实例1) 方案 1 [分析说明]2) 方案 2 [分析说明]3) 方案 3 [分析说明]1.2 单一职责原则注意事项和细节2. 接口隔离原则2.1 应用实例2.2 应传统方法的问题和使用接口隔离原则改进3. 依赖倒转原则3.1 应用实例1) 实现方案 1 + 分析说明2) 实现方案 2(依赖倒转) + 分析说明3.2 依赖关系传递的三种方式和应用案例1) 接口传递2) 构造方法传递3) setter 方式传递3.3依赖原创 2020-07-19 21:47:32 · 545 阅读 · 0 评论