![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
设计模式
文章平均质量分 66
小傅哥的设计模式 学习笔记
https://bugstack.cn/
java持续实践
Java开发
展开
-
设计模式 访问者模式
文章目录访问者模式访问者模式实战访问者模式在相同的数据结构下, 增加容易变化的业务访问逻辑, 为了增强扩展性, 将易变的访问逻辑进行解耦的一种设计模式.访问者模式实战模拟学校中, 有老师和学生, 也有家长和校长这两种数据访问的模式.该设计模式的类图如下抽象用户类 Userpublic abstract class User { // 姓名 public String name; // 身份 学生: 重点班、普通班 | 老师: 特级教师、普通教师、实习教师原创 2022-04-04 15:56:45 · 576 阅读 · 0 评论 -
设计模式 模板方法模式
文章目录模板方法模式模板方法模式实战模板方法模式模板方法模式适用于统一了执行的顺序和基本策略, 但具体每一步如何实现, 由各自的方法去实现.模板方法模式实战模拟获取京东 , 淘宝, 当当网的数据. 虽然他们网站的结构不一样, 但获取数据的过程是一致的, 模拟登录, 获取数据, 对数据进行处理, 生成海报等.模板方法模式的uml图如下抽象类NetMall 如下public abstract class NetMall { protected Logger logger = Logge原创 2022-04-04 09:26:56 · 223 阅读 · 0 评论 -
设计模式 状态模式
文章目录状态模式状态模式实战.不使用状态模式的写法使用状态模式的写法状态模式状态模式的情景: 状态模式用于一个行为下的多种状态的变更.例如活动的审核 , 上线 ,下线状态等.状态模式实战.模拟活动的编辑 ,上线 , 审批拒绝, 审批通过等. 并且有些状态的流转是不可行的, 比如编辑中, 到下线.创建tutorials-22.0-1 模块.定义状态的枚举package com.thc.design;/** * 类名称:Status * 类描述: 活动状态枚举 * * 创建时间原创 2022-04-03 15:29:03 · 590 阅读 · 0 评论 -
设计模式 观察者模式
文章目录观察者模式观察者模式实战不使用观察者模式写法观察者模式写法观察者模式观察者模式场景: 当一个行为发生时, 传递信息给另外一个用户接收做出相应的处理. 两者没有直接的耦合关联.观察者模式实战模拟汽车摇号的结果进行通知.创建 tutorials-21.0-0 模块.进行汽车摇号服务的模拟public class MinibusTargetService { public String lottery(String uId) { return Math.abs原创 2022-04-03 10:27:09 · 385 阅读 · 0 评论 -
设计模式 中介者模式
文章目录中介者模式中介者模式实战不使用中介者模式写法使用中介者模式写法测试验证中介者模式中介者模式使用的场景: 把复杂功能的重复调用, 中间添加一层包装, 对外提供简单, 易扩展的服务能力. 例如中间件组提供的统一的接口与服务等.中介者模式实战模拟jdbc连接数据库的操作. 使用中介者模式,手写一个简易版的mybatis.不使用中介者模式写法创建模块tutorials-19.0-0 创建JDBCUtil类该类是纯手写jdbc的过程.public class JDBCUtil {原创 2022-04-01 22:35:27 · 838 阅读 · 0 评论 -
设计模式 备忘录模式
备忘录模式使用备忘录模式的情景:一般用于版本的回退, 页面上临时配置的回退等操作.备忘录模式实战模拟记录各个版本配置信息, 并实现配置的回退, 前进等操作.uml图如下配置信息类@AllArgsConstructor@NoArgsConstructor@Datapublic class ConfigFile { // 版本号 private String versionNo; // 内容 private String content; // 时原创 2022-03-31 22:24:30 · 433 阅读 · 0 评论 -
设计模式 迭代器模式
文章目录迭代器模式情景迭代器模式实战迭代器模式情景在jdk中已经提供了迭代器模式, 用于集合的迭代遍历.实现Iterable 接口, 通过next的方式, 获取集合元素. 同时具备对元素的删除等操作. 优点是以相同的方式遍历不同数据结构的元素, 不用去关心迭代的数据的结构, 让使用者变得统一易用.迭代器模式实战模拟公司部门迭代.创建雇员类 .@AllArgsConstructor@NoArgsConstructor@Datapublic class Employee { //原创 2022-03-30 23:29:29 · 245 阅读 · 0 评论 -
设计模式 命令模式
文章目录命令模式情景命令模式实战不使用命令模式写法使用命令模式写法命令模式情景把逻辑实现与操作进行分离, 降低耦合方便扩展. 以数据驱动的方式命令对象, 使用构造函数传递给调用者. 调用者再提供相应的实现为命令执行具体的操作方法.命令模式实战模拟在餐厅中点餐交给厨师的场景.顾客只需点不同的菜系, 店小二把不同的菜系写菜单上, 通过菜单下命令, 不同的厨师进行炒菜.不使用命令模式写法public class XiaoEr { private Logger logger = Logge原创 2022-03-29 21:24:19 · 433 阅读 · 0 评论 -
设计模式 责任链模式
文章目录责任链模式场景责任链模式实战不使用责任链模式的写法使用责任链模式的写法责任链模式场景用于解决一组服务中的先后执行处理关系, 例如出差补贴, 不超过100的组内领导审批, 超过100不超过200的,先组内领导审批接着部门领导审批, 超过200不超过300 的, 从组内领导 到部门领导, 再到公司领导挨个审批.责任链模式实战模拟上线的三级 二级 一级 审批.平时用三级审批. 临近促销二级审批. 618, 双十一期间需要一级审批.不使用责任链模式的写法创建模块tutorials-16.原创 2022-03-28 22:33:58 · 680 阅读 · 0 评论 -
设计模式 代理模式
文章目录代理模式情景代理模式实战代理模式情景代理模式用于某些资源的访问, 对象的类 易用操作上提供方便使用的代理服务. 用到的一些组件会提供给你简单易用的方式控制原本需要编写很多代码进行使用的服务类.例如rpc框架, 在拿到jar包对接口的描述后, 会生成代理类, 当调用接口的时候, 通过代理类发出socket信息进行通信.mybatis框架, 只写了接口, 框架会在底层生成代理类去执行crud操作.代理模式实战模拟mybatis 生成代理类.类图如下编写自定义注解Select@原创 2022-03-27 15:49:32 · 473 阅读 · 0 评论 -
设计模式 享元模式
文章目录享元模式情景享元模式实战不使用享元模式的写法使用享元模式的写法享元模式情景享元模式主要在于共享通用对象,减少内存的使用,提升系统的访问效率。而这部分共享对象通常比较耗费内存或者需要查询大量接口或者使用数据库资源,因此统一抽离作为共享对象使用。享元模式实战模拟在商品秒杀场景下使用享元模式查询优化.商品活动信息是不变的, 变化的是库存信息.不使用享元模式的写法模拟活动信息和库存信息都从数据库中查询.创建tutorials-14.0-0 模块创建Activity活动类@Datapub原创 2022-03-27 14:00:47 · 1142 阅读 · 0 评论 -
设计模式 外观模式
文章目录外观模式 情景外观模式任务实战不使用外观模式的写法使用外观模式的写法 (行动)外观模式 情景外观模式用于降低调用方的使用接口的复杂逻辑组合。对服务中的通用性复杂逻辑进行中间件层包装,让使用方可以只关心业务开发。外观模式任务实战此案例是对接口的访问权限进行控制, 只对添加了白名单的人, 进行接口访问.不使用外观模式的写法创建tutorials-13.0-1项目白名单的创建方式如下. 直接在接口中进行白名单控制, 这样代码耦合度太高, 且每个接口都这样改的话, 工作量也大.pub原创 2022-03-26 18:29:45 · 734 阅读 · 0 评论 -
设计模式 装饰器模式
文章目录装饰器模式使用的情景装饰器模式使用的任务装饰器模式实战不使用装饰器模式写法使用装饰器模式写法 (行动)装饰器模式使用的情景在不改原有类的基础上, 给类新增功能.装饰器模式使用的任务单点登录模块, 一开始只是认证某个权限, 但随着业务的发展, 需要验证很多其他权限. 限定的任务是在不改变原有单点登录代码上 , 对验证权限进行扩展.装饰器模式实战创建tutorials-12.0-0模块.public interface HandlerInterceptor { boolean p原创 2022-03-26 11:45:07 · 470 阅读 · 0 评论 -
设计模式 桥接模式
文章目录桥接模式桥接模式实战不使用桥接模式的写法使用桥接模式的写法桥接模式通过将抽象部分与实现部分分离 ,把多钟可匹配的场景进行组合.核心实现是A类中有B类的接口, 通过构造函数传递B类的实现, 这个B类就是桥.JDBC的多种驱动的实现, 业务实现中的多种类接口的同组过滤服务.桥接模式实战支付有支付宝和微信, 支付宝微信支付时也有密码验证 ,指纹, 人脸识别.那么他们相互组合, 一共有6种方式来进行支付.不使用桥接模式的写法创建tutorials-10.0-0模块.建立PayContro原创 2022-03-20 18:06:48 · 615 阅读 · 0 评论 -
设计模式 原型模式
文章目录原型模式介绍原型模式实战原型模式介绍原型模式用来解决创建重复对象, 这些对象创建的内容比较复杂, 可能涉及到到远程服务调用, 采用克隆方式创建此对象, 节省时间.原型模式实战需求背景: 给每个人创建试卷, 试卷的题目是相同的, 但需要选项不同, 防止作弊....原创 2022-03-20 13:03:54 · 219 阅读 · 0 评论 -
设计模式 单例模式
文章目录单例模式介绍单例模式的7种写法0. 静态类的使用懒汉模式 线程不安全的写法线程安全的懒汉模式 方法上全局加锁饿汉式单例模式单例模式 内部类的写法 线程安全 (推荐)双重检查的单例模式 (推荐)cas 加 AtomicReference 实现安全的单例枚举实现单例模式单例模式介绍系统中只允许创建一个对象.数据库的连接池.spring的单例bean配置类等单例模式的7种写法0. 静态类的使用public class Singleton00 { /** * 系统第原创 2022-03-20 13:03:40 · 348 阅读 · 0 评论 -
设计模式 适配器模式
文章目录适配器模式介绍适配器模式实战不使用适配器模式的写法使用适配器模式的写法mq消息适配接口适配适配器模式介绍把原本不兼容的接口, 进行改造, 让其进行统一适配, 方便各种形式的使用.开发中, 类似中台业务, 订单有很多的来源, 把接收订单的接口进行封装, 适配各种订单进入中台.适配器模式实战模拟MQ消息. 有开户消息 , 自营订单消息, 第三方店铺订单消息, 都要通过mq进行处理.粗暴的写法是每一个消息都写一个类处理. 而使用适配器模式后, 可以把消息进行统一字段封装, 放在一个类进行原创 2022-03-20 13:03:10 · 157 阅读 · 0 评论 -
设计模式 建造者模式
建造者模式介绍将多个简单的对象 , 一步步组装构建出一个复杂对象的过程.根据相同的 物料 ,不同的组装所产⽣出的具体的内容,就是建造者模式的最终意图,也就是:将⼀个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。建造者实战场景: 装修都需要吊顶, 涂料, 地板和地砖等. 不同级别的装修, 是不同的吊顶, 涂料, 地板和地砖组合.创建tutorials-6.0-0项目, 创建吊顶, 涂料, 地板和地砖pom如下<?xml version="1.0" encoding=原创 2022-03-17 21:52:08 · 316 阅读 · 0 评论 -
设计模式 抽象工厂模式
文章目录抽象工厂模式介绍抽象工厂模式的实战不使用抽象工厂模式的写法使用抽象工厂模式的写法定义适配接口创建不同集群缓存的实现创建代理类抽象工厂在Spring中的应用抽象工厂模式介绍抽象工厂模式是创建其他工厂的模式.一个标准(接口)有不同的实现.抽象工厂模式的实战案例是采用系统中有不同的缓存服务.对不同的缓存服务做适配.不使用抽象工厂模式的写法创建tutorials-5.0-0 模块pom中如下<?xml version="1.0" encoding="UTF-8"?><原创 2022-03-16 22:20:44 · 895 阅读 · 0 评论 -
设计模式 设计模式如何落地
资料来源https://www.bilibili.com/video/BV1uF411t7pK/?spm_id_from=333.788学习设计模式的共性问题 ;学的demo代码特别简单, 但是一到实际项目中就不知道咋用了.要避开特别简单的demo ,从实际业务场景中去学习.代理模式: 从模拟mybatis-spring中定义dao接口, 使用代理类的方式 ,操作数据库原理实现的场景.责任链模式: 模拟618 电商, 项目上线多级负责人审批场景.等等一系列的场景, 来实战设计模式.为什原创 2022-03-15 06:17:52 · 1235 阅读 · 0 评论 -
设计模式 工厂方法模式
文章目录工厂方法模式工厂方法模式实战不使用工厂方法模式的写法使用工厂方法模式的写法工厂方法模式定义: 是一种创建型模式, 其在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型.案例: 多钟类型商品不同接口, 统一发奖服务搭建.工厂方法模式实战设定需求为 发放三种类型的礼品 视频网站充值卡, 优惠券, 实物商品.不使用工厂方法模式的写法创建tutorials-4.0-0模块pom中如下 <groupId>org.example</groupId>原创 2022-03-14 23:22:37 · 450 阅读 · 0 评论 -
设计模式 依赖倒置原则
文章目录依赖倒置原则依赖倒置原则实战使用依赖倒置原则进行改变案例中两种方式的类图依赖倒置原则定义:程序要依赖于抽象接口, 不要依赖于具体实现, 对抽象进行编程, 而不是对实现进行编程, 降低了客户与实现模块的耦合.高层模块不应该依赖底层模块, 都应该依赖抽象(接口 抽象类)上级找下级, 一般不会直接找你 ,而是通过助理等找到.下级去依赖上级的标准等. 上级出的标准, 不需要去关心下级如何去实现的. 降低上级的耦合性.spring的spi机制等.依赖倒置原则实战随机抽奖与权重抽奖.不使原创 2022-03-13 10:23:51 · 795 阅读 · 0 评论 -
设计模式 接口隔离原则
文章目录接口隔离原则接口隔离原则代码实战接口隔离原则的优化接口隔离原则在开源框架中的应用笔记来源https://www.bilibili.com/video/BV1pY41137TB/?spm_id_from=333.788接口隔离原则要求程序员尽量将臃肿庞大的接口, 拆分为更小和更加具体的接口.让接口中只包含客户感兴趣的方法.用更小的接口 更具体的接口处理业务.问题越小, 越容易被处理, 达到高内聚, 低耦合.接口隔离原则代码实战英雄联盟中, 每个英雄都有各自的一些技能定义一个技能接原创 2022-03-12 17:57:24 · 519 阅读 · 0 评论 -
设计模式 迪米特原则
文章目录迪米特原则迪米特原则 实战迪米特原则改造.迪米特原则理解在实际项目中, 设计原则用于做什么, 比一定非得符合某个规范.迪米特原则 :最少知道 , 减少依赖.降低类之间的耦合. 高内聚, 低耦合.迪米特原则 实战学生 老师 校长类原有的写法是直接在校长类Principal 中计算学生相关的数据.学生类package com.thc.design;/** * 类名称:Student * 创建时间:2022/3/11 6:51 */public class Student原创 2022-03-12 16:37:00 · 797 阅读 · 0 评论 -
设计模式 里氏替换原则
文章目录里氏替换原则里氏替换代码实战使用抽象类里氏替换代码实战学习资料来源https://www.bilibili.com/video/BV1rU4y1f7uy里氏替换原则定义: 继承必须确保超类所拥有的性质在子类中成立.实现了兼容性, 维护性, 扩展性. 实现某个类, 不能把父类的原有功能结构破坏掉 .生活中的例子 : 去宜家, 都是从一个方向进, 一个方向出. 去海底捞, 服务大都一致. 一流的公司做标准.里氏替换代码实战本例中使用储蓄卡和信用卡作为例子.储蓄卡和信用卡都有取现和原创 2022-03-10 19:48:22 · 168 阅读 · 0 评论 -
设计模式 开闭原则
文章目录开闭原则的定义开闭原则代码实战开闭原则的定义对扩展开放, 对原有的修改封闭.类似于封装好的jar包, 只能对其扩展功能, 不能对其jar包修改 .开闭原则代码实战需求: 计算圆的面积. 原有封装好的jar包中定义的π 是3.14, 但某个需求需要更高精度的π, 那么就需要对原有的计算圆面积的π进行扩展, 提高精度.接口: ICalculationAreapublic interface ICalculationArea { /** *计算面积 圆形原创 2022-03-09 06:51:52 · 112 阅读 · 0 评论 -
设计模式 单一职责
文章目录设计模式介绍单一职责原则设计模式介绍设计模式是什么 是系统服务的解决方案, 是逻辑开发中拿到共性问题设计模式学习的是思想.设计模式的分类 : 创建型模式 结构型模式 行为模式学习设计模式的方法: 设计模式最好的学习是根据案例学习 , 要先使用 ,再研究原理. 就像买汽车, 先跑起来, 再研究一下车的相关原理.单一职责原则单一职责原则 :一个类, 应该只有一个发生变化原因.并不是if else 更快, 而是因为设计模式不熟练.视频的例子 , 访客用户, 普通用户, vi原创 2022-03-09 05:49:27 · 177 阅读 · 0 评论