【Java-设计模式】
文章平均质量分 79
【入门JavaSE/JVM/并发编程/涉及模式】
我一直在流浪
这个作者很懒,什么都没留下…
展开
-
设计模式实战 - 工厂模式实现总览页面工作进展指标查询
③ 从HTTP请求头中获取一个名为"refreshCache"的标志位,以指示是否需要刷新缓存。① 构建工作进展整体结果指标缓存的key。② 构建缓存处置实体数量的key。① 计算工作进展指标告警处置数。② 计算工作进展指标事件处置数。原创 2023-05-25 16:55:53 · 882 阅读 · 0 评论 -
设计模式实战 - 工厂模式获取进程行为类型
【代码】设计模式实战 - 工厂模式获取进程行为类型。原创 2023-03-24 11:19:14 · 95 阅读 · 0 评论 -
设计模式实战 - 责任链模式实现多因子身份认证登录
单纯的用户名密码登录方式在某些时候还是不够安全,因为大部分用户会在各种平台使用同样的密码,只要有一个平台发生泄露,那么很可能影响其他平台。所以增加一步或者多步验证成了目前比较流行的方案,双因子认证是多因子认证的一种形式。目前公司的产品需求是实现用户名密码认证登录即可,但是为了方便以后扩展,使用了责任链模式来实现多因子身份认证登录,如果以后想要添加多因子认证登录功能,可添加一个认证处理器,这里对这个需求的业务实现做一次简单总结(去除跟本文想表达的责任链模式无关的内容)① 创建 t_user 表。原创 2022-10-30 19:08:55 · 1013 阅读 · 1 评论 -
王争 | 设计模式之美 - 职责链模式
将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。在职责链模式中,多个处理器(也就是刚刚定义中说的“接收对象”)依次处理同一个请求。一个请求先经过 A 处理器处理,然后再把请求传递给 B 处理器,B 处理器处理完后再传递给 C 处理器,以此类推,形成一个链条。链条上的每个处理器各自承担各自的处理职责,所以叫作职责链模式。原创 2022-10-30 12:02:46 · 1430 阅读 · 1 评论 -
读书 | 设计模式之禅 - 责任链模式
使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。责任链模式的重点是在“链”上,由一条链去处理相似的请求在链中决定谁来处理这个请求,并返回相应的结果:① Handler 抽象类//每个处理者都必须对请求做出处理 //被final修改的抽象方法不能被继承 public final Response handleMessage(Request request) {原创 2022-10-30 09:11:02 · 407 阅读 · 1 评论 -
设计模式实战 - 工厂类获取数据同步器 OpenDataSynchronizerFactory
*** 用于* {@link OpenDataSynchronizer} 标注支持的同步类型* {@link DeviceConnector} 标注支持的设备连接器/*** @return 支持的同步数据类型};/*** @return 支持的设备类型};}原创 2022-10-16 21:32:05 · 366 阅读 · 0 评论 -
设计模式实战 - 工厂类获取设备连接器 DeviceConnectorFactory
*** 用于标注 {@link DeviceConnector} 支持的设备连接器/*** @return 支持的设备类型};}原创 2022-10-16 20:37:18 · 343 阅读 · 0 评论 -
设计模式实战 - 工厂方法模式
通过工厂模式可以把对象的创建和使用过程分割开来,比如说 Class A 想调用 Class B的方法,那么我们无需关心B是如何创建的,直接去工厂获取就行。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建并且返回哪一个产品类的实例(这些产品类继承自一个父类或接口)。原创 2022-10-16 16:40:17 · 316 阅读 · 0 评论 -
读书 | 设计模式之禅 - 建造者模式
Director 类叫做导演类(Director Class),负责安排已有模块的顺序,然后告诉 Builder 开始建造,在上面的例子中就是我们的老大,Client 找到老大,说我要这个,这个,那个类型的车辆模型,然后老大就把命令传递给我,我和我的团队就开始拼命的建造,于是一个项目建设完毕了。满足了牛叉公司的需求了,满足完了,还要下一个需求呀,然后是第 2 件宝马模型,只要启动,停止,其他的什么都不要,第 3 件模型,先喇叭,然后启动,然后停止,第 4 件…,直到把你逼疯为止,那怎么办?原创 2022-09-26 12:30:54 · 292 阅读 · 0 评论 -
读书 | 设计模式之禅 - 策略模式
策略模式(Strategy Pattern)是一种比较简单的模式,也叫做政策模式(Policy Pattern)。其定义如下:定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。这个定义是非常明确、清晰的,“定义一组算法”,看看我们的三个计谋是不是三个算法?“将每个算法都封装起来”,封装类Context不就是这个作用吗?“使它们可以互换”当然可以互换了,都实现是相同的接口,那当然可以相互转化了。原创 2022-09-12 10:22:49 · 273 阅读 · 0 评论 -
读书 | 设计模式之禅 - 工厂方法模式
文章目录1. 女娲造人的故事1.1 人类接口1.2 黑色人种1.3 白色人种1.4 黄色人种1.5 抽象人类创建工厂1.6 人类创建工厂1.7 女娲类2. 工厂方法模式的定义2.1 抽象产品类2.2 具体产品类2.3 抽象工厂类2.4 具体工厂类2.5 场景类3. 工厂方法模式的应用4. 工厂方法模式的使用场景5. 工厂方法模式的扩展5.1 缩小为简单工厂模式5.2 升级为多个工厂类5.2.1 多工厂模式的抽象工厂类5.2.2 黑色人种的创建工厂5.2.3 白色人种的创建工厂5.2.4 黄色人种的创建工厂5原创 2022-05-29 14:23:04 · 225 阅读 · 1 评论 -
王争 | 设计模式之美 - 工厂模式:我为什么说没事不要随便用工厂模式创建对象?
1. 简单工厂(Simple Factory)在下面这段代码中,我们根据配置文件的后缀(json、xml、yaml、properties),选择不同的解析器(JsonRuleConfigParser、XmlRuleConfigParser…),将存储在文件中的配置解析成内存对象 RuleConfig。public class RuleConfigSource { public RuleConfig load(String ruleConfigFilePath) { String原创 2022-05-28 20:54:59 · 267 阅读 · 0 评论 -
Java设计模式 - 模板方法设计模式
文章目录1. 豆浆制作问题2. 模板方法模式基本介绍3. 模板方法模式原理类图4. 模板方法模式解决豆浆制作问题5. 模板方法模式的钩子方法6. 模板方法模式在Spring框架应用的源码分析7. 模板方法模式的注意事项和细节1. 豆浆制作问题编写制作豆浆的程序,说明如下:制作豆浆的流程 选材—>添加配料—>浸泡—>放到豆浆机打碎 。通过添加不同的配料,可以制作出不同口味的豆浆 。选材、浸泡和放到豆浆机打碎几个步骤对于制作每种口味的豆浆都是一样的。请使用 模板方法原创 2022-05-04 18:14:13 · 262 阅读 · 0 评论 -
Java设计模式 - 代理设计模式
文章目录1. 代理模式的基本介绍2. 静态代理3. 动态代理4. Cglib代理5. 代理模式(Proxy)的变体1. 代理模式的基本介绍代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的 功能操作,即扩展目标对象的功能。被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象代理模式有不同的形式, 主要有三种 静态代理、动态代理 (JDK代理、接口代 理)和 Cglib代理 (可以在内存动原创 2022-05-04 16:05:45 · 294 阅读 · 0 评论 -
Java设计模式 - 享元设计模式
文章目录1. 展示网站项目需求2. 传统方案解决网站展现项目3. 享元模式基本介绍4. 享元模式的原理类图5. 内部状态和外部状态6. 享元模式解决网站展现项目7. 享元模式在JDK-Interger的应用源码分析8. 享元模式的注意事项和细节1. 展示网站项目需求小型的外包项目,给客户A做一个产品展示网站,客户A的朋友感觉效果不错,也希 望做这样的产品展示网站,但是要求都有些不同:有客户要求以新闻的形式发布 。有客户人要求以博客的形式发布 。有客户希望以微信公众号的形式发布。2原创 2022-05-04 15:10:16 · 151 阅读 · 0 评论 -
Java设计模式 - 外观设计模式
文章目录1. 影院管理项目2. 传统方式解决影院管理3. 外观模式基本介绍4. 外观模式原理类图5. 外观模式解决影院管理6. 外观模式在MyBatis框架应用的源码分析7. 外观模式的注意事项和细节1. 影院管理项目组建一个家庭影院: DVD播放器、投影仪、自动屏幕、环绕立体声、爆米花机。要求完成使用家庭影院的功能,其过程为:直接用遥控器:统筹各设备开关开爆米花机放下屏幕开投影仪开音响开DVD,选dvd去拿爆米花调暗灯光播放观影结束后,关闭各原创 2022-05-04 12:18:20 · 164 阅读 · 0 评论 -
Java设计模式 - 组合设计模式
文章目录1. 学校院系展示需求2. 传统方案解决学校院系展示3. 组合模式基本介绍4. 组合模式原理类图5. 组合模式解决的问题6. 组合模式解决学校院系展示7. 组合模式在JDK集合的源码分析1. 学校院系展示需求编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系 组成,一个学校有多个学院,一个学院有多个系。如图:2. 传统方案解决学校院系展示传统方案解决学校院系展示存在的问题分析:将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分 层次的 。原创 2022-05-04 11:48:19 · 474 阅读 · 0 评论 -
Java设计模式 - 装饰者设计模式
文章目录1. 星巴克咖啡订单项目2. 方案1-解决星巴克咖啡订单项目3. 方案2-解决星巴克咖啡订单4. 装饰者模式定义5. 装饰者模式(Decorator)原理6. 装饰者模式解决星巴克咖啡订单7. 装饰者模式在JDK应用的源码分析1. 星巴克咖啡订单项目咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式 咖啡)、Decaf(无因咖啡) 。调料:Milk、Soy(豆浆)、Chocolate 。要求在扩展新的咖啡种类时,具有良好的扩展性、原创 2022-05-04 11:14:49 · 206 阅读 · 0 评论 -
Java设计模式 - 桥接设计模式
文章目录1. 手机操作问题2. 传统方案解决手机操作问题3. 桥接模式(Bridge)-基本介绍4. 桥接模式(Bridge)-原理类图5. 桥接模式解决手机操作问题6. 桥接模式在JDBC的源码剖析7. 桥接模式的注意事项和细节8. 桥接模式其它应用场景1. 手机操作问题现在对不同手机类型的 不同品牌实现操作编程(比如: 开机、关机、上网,打电话等)2. 传统方案解决手机操作问题传统方案解决手机操作问题分析 :扩展性问题(类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各个品 牌原创 2022-05-02 22:59:26 · 138 阅读 · 0 评论 -
Java设计模式 - 适配器设计模式
文章目录1. 泰国旅游使用插座问题2. 适配器模式基本介绍3. 适配器模式工作原理4. 类适配器模式5. 对象适配器模式6. 接口适配器模式7. 适配器模式在SpringMVC框架应用的源码分析8. 适配器模式的注意事项和细节1. 泰国旅游使用插座问题现实生活中的适配器例子泰国插座用的是两孔的(欧标),可以买个多功能转换插头 (适配器) ,这样就可以 使用了。2. 适配器模式基本介绍适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表 示,主的目的是兼容性,原创 2022-05-02 22:21:15 · 186 阅读 · 0 评论 -
Java设计模式 - 建造者设计模式
文章目录1. 盖房项目需求2. 传统方式解决盖房需求3. 建造者模式基本介绍4. 建造者模式解决盖房需求5. 建造者模式在JDK的应用和源码分析6. 建造者模式的注意事项和细节1. 盖房项目需求需要建房子:这一过程为打桩、砌墙、封顶 。房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是 要求不要相同的。请编写程序,完成需求。2. 传统方式解决盖房需求public abstract class AbstractHouse { //打地基 publi原创 2022-05-02 21:17:08 · 76 阅读 · 0 评论 -
Java设计模式 - 原型设计模式
文章目录1. 克隆羊问题2. 传统方式解决克隆羊问题3. 原型模式基本介绍4. 原型模式解决克隆羊问题5. 原型模式在Spring框架中源码分析6. 浅拷贝7. 深拷贝8. 原型模式的注意事项和细节1. 克隆羊问题现在有一只羊tom,姓名为: tom, 年龄为:1,颜色为:白色,请编写程序创建和tom 羊 属性完全相同的10只羊。2. 传统方式解决克隆羊问题@Data@AllArgsConstructorpublic class Sheep { private String name;原创 2022-05-02 18:41:54 · 136 阅读 · 0 评论 -
Java设计模式 - 工厂设计模式
文章目录1. 使用传统的方式来完成2. 简单工厂模式3. 工厂方法模式4. 抽象工厂模式5. 工厂模式在JDK-Calendar 应用的源码分析6. 工厂模式小结看一个披萨的项目:要便于披萨种类的扩展,要便于维护披萨的种类很多(比如 GreekPizz、CheesePizz 等) 。披萨的制作有 prepare,bake, cut, box。完成披萨店订购功能。1. 使用传统的方式来完成//将Pizza 类做成抽象public abstract class Pizza {原创 2022-05-02 17:15:59 · 149 阅读 · 0 评论 -
Java设计模式 - 单例设计模式
文章目录01. 设计模式介绍02. 单例设计模式介绍03. 饿汉式(静态常量)04. 饿汉式(静态代码块)05. 懒汉式(线程不安全)06. 懒汉式(线程安全,同步方法)07. 懒汉式(线程安全,同步代码块)08. 双重检查09. 静态内部类10. 枚举11. 单例模式在JDK 应用的源码分析12. 单例模式注意事项和细节说明01. 设计模式介绍设计模式分为三种类型,共23种创建型模式:单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式。结构型模式:适配器模式、桥接模式、装饰模式、组合模原创 2022-05-02 11:33:41 · 175 阅读 · 0 评论 -
Java设计模式 - UML类图
文章目录1. UML基本介绍2. UML图3. UML类图4. 类图—依赖关系(Dependence)5. 类图—泛化关系 (generalization)6. 类图—实现关系(Implementation)7. 类图—关联关系(Association)8. 类图—聚合关系(Aggregation)9. 组合关系1. UML基本介绍UML——Unified modeling language UML (统一建模语言),是一种用于软件系统 分析和设计的语言工具,它用于帮助软 件开发人员进行思考和记录思原创 2022-05-02 00:02:15 · 707 阅读 · 0 评论 -
Java设计模式 - 合成复用原则
原则是尽量使用合成/聚合的方式,而不是使用继承设计原则核心思想:找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代 码混在一起。针对接口编程,而不是针对实现编程。为了交互对象之间的松耦合设计而努力...原创 2022-05-01 22:25:12 · 473 阅读 · 0 评论 -
Java设计模式 - 迪米特法则
文章目录1. 违反迪米特法则2. 遵守迪米特法则3. 迪米特法则注意事项和细节一个对象应该对其他对象保持最少的了解类与类关系越密切,耦合度越大迪米特法则(Demeter Principle)又叫最少知道原则,即一个类对自己依赖的类知道的 越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内 部。对外除了提供的public 方法,不对外泄露任何信息迪米特法则还有个更简单的定义:只与直接的朋友通信直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦原创 2022-05-01 22:17:21 · 229 阅读 · 0 评论 -
Java设计模式 - 开闭原则
文章目录1. 违反开闭原则2. 遵守开闭原则开闭原则(Open Closed Principle)是编程中最基础、最重要的设计原则一个软件实体如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用 方)。用抽象构建框架,用实现扩展细节。当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。编程中遵循其它原则,以及使用设计模式的目的就是遵循开闭原则。1. 违反开闭原则//Shape类,基类class Shape { int原创 2022-05-01 21:50:56 · 305 阅读 · 0 评论 -
Java设计模式 - 里氏替换原则
文章目录1. 违反里氏替换原则2. 遵守里氏替换原则OO中的继承性的思考和说明 :继承包含这样一层含义:父类中凡是已经实现好的方法,实际上是在设定规范和契 约,虽然它不强制要求所有的子类必须遵循这些契约,但是如果子类对这些已经实现的方法任意修改,就会对整个继承体系造成破坏。继承在给程序设计带来便利的同时,也带来了弊端。比如使用继承会给程序带来侵 入性,程序的可移植性降低,增加对象间的耦合性,如果一个类被其他的类所继承, 则当这个类需要修改时,必须考虑到所有的子类,并且父类修改后,所有涉及到子原创 2022-05-01 21:29:07 · 134 阅读 · 0 评论 -
Java设计模式 - 依赖倒转原则
文章目录1. 违反依赖倒转原则2. 遵守依赖倒转原则3. 依赖关系传递的3种方式3.1 接口传递3.2 构造方法传递3.3 setter方法传递Dependence Inversion Principle 依赖倒转原则是指:高层模块不应该依赖低层模块,二者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。依赖倒转(倒置)的中心思想是面向接口编程。依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的 多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。原创 2022-05-01 20:23:53 · 264 阅读 · 0 评论 -
Java设计模式 - 接口隔离原则
文章目录方案1 - 违反接口隔离原则方案2 - 遵守接口隔离原则Interface Segregation Principle:客户端不应该依赖它不需要的接 口,即一个类对另一个类的依赖应该建立在最小的接口上 。如下图:类A通过接口Interface1依赖类B,类C通过 接口Interface1依赖类D,如果接口 Interface1对于类A和类C来说不是最小接口, 那么类B和类D必须去实现他们不需要的方法。方案1 - 违反接口隔离原则interface Interface1 { void原创 2022-05-01 19:50:18 · 610 阅读 · 0 评论 -
Java设计模式 - 单一职责原则
文章目录1. 方案12. 方案23. 方案34. 单一职责原则注意事项和细节对类来说的,即一个类应该只负责一项职责。如类A负责两个不同职责:职责1,职责2。 当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为 A1,A21. 方案1定义一个交通工具Vehicle类:class Vehicle { public void run(String vehicle) { System.out.println(vehicle + " 在公路上运行....");原创 2022-05-01 18:59:54 · 178 阅读 · 0 评论 -
建造者模式(生成器模式)
1.传统方式package builder;public abstract class AbstractHouse { //打地基 public abstract void buildBasic(); //砌墙 public abstract void buildWalls(); //封顶 public abstract void roofe...原创 2019-10-15 10:37:37 · 209 阅读 · 0 评论 -
建造者模式
Human.java:一个人,这个人有头,身体,胳膊,脚这些属性public class Human { private String head; private String body; private String hand; private String foot; public String getHead() { return...原创 2019-10-14 22:16:15 · 142 阅读 · 0 评论 -
工厂模式
简单工厂模式public abstract class Animal { public abstract void eat();}public class Dog extends Animal{ @Override public void eat() { System.out.println("狗吃肉...."); }}public...原创 2019-10-14 21:33:48 · 161 阅读 · 0 评论 -
简单工厂模式
需求:1.披萨的种类很多GreekPizz,CheesePizz2.披萨的制作有prepare,bake,cut,box3.完成披萨店订购功能一般情况下制作Pizza的抽象类,里面有四个方法,由于准备每种pizza的原材料不同,所以prepare()方法设置为抽象方法,其他方法设置为具体方法package pizzastore.pizza;//将Pizza类做成抽象类publi...原创 2019-10-14 20:34:15 · 121 阅读 · 0 评论 -
工厂模式
1.简单工厂Car接口:public interface Car { void name();}CarFactory.java:public class CarFactory { //方法一 public static Car getCar(String car){ if(car.equals("wuling")){ ...原创 2019-10-13 20:59:29 · 166 阅读 · 0 评论 -
JDK动态代理模式
//接口public interface ITeacherDao { void teacher(); void sayHello(String name );}//目标对象public class TeacherDao implements ITeacherDao { @Override public void teacher() { ...原创 2019-10-13 17:18:59 · 253 阅读 · 0 评论 -
JDK动态代理模式
下面通过查看API,来看动态代理模式所用到的一个方法和接口:下面提供一个接口:这个接口的实现类:如果有两个接口:UserDao接口://接口public interface UserDao { void add(); void delete();}UserDaoImpl实现类:public class UserDaoImpl implements...原创 2019-10-13 16:46:07 · 166 阅读 · 0 评论 -
静态代理模式
接口:ITeacherDao//接口public interface ITeacherDao { void teacher();}目标类:TeacherDao.java//目标对象public class TeacherDao implements ITeacherDao { @Override public void teacher() { ...原创 2019-10-13 11:23:15 · 120 阅读 · 0 评论