![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 75
雪人奥特曼Q
这个作者很懒,什么都没留下…
展开
-
访问控制功能 —— Servlet Filter、Spring Interceptor、AOP的区别?
在项目开发中,类似权限这样的访问控制功能,我们该选择三者(AOP、Servlet Filter、Spring Interceptor)中的哪个来实现呢?原创 2021-03-04 19:59:22 · 347 阅读 · 1 评论 -
设计模式之美笔记 - 学习框架
sold原则原创 2020-11-24 23:32:48 · 187 阅读 · 0 评论 -
设计模式之美笔记 —— 中介模式
设计模式之美 - 73一、中介模式的原理与实现1、原理:中介模式定义了一个单独的中介对象,来封装一组对象之间的交互。将这组对象之间的交互委派给中介对象交互,来避免对象间的直接交互。中介模式的设计思想和中间层(给代码解耦的一种方法就是引入中间层)很像,通过引入中介这个中间层,将一组对象建的交互,从多对多改成一对多。二、中介模式和观察者模式的异同...原创 2021-01-19 16:05:47 · 147 阅读 · 0 评论 -
单例模式 —— 处理资源访问冲突问题
通过单例模式实现一个往文件中打印日志的Logger类。原创 2020-09-27 18:10:04 · 345 阅读 · 0 评论 -
设计模式之美笔记 —— 解释器模式
设计模式之美 - 72一、解释器模式定义:为某个语言定义它的语法(或者叫文法)表示,并定义一个解释器用来处理这个语法。从广义上来讲,只要是能承载信息的载体,我们都可以称之为“语言”。要想了解“语言”表达的信息,我们就必须定义相应的语法规则。这样,书写者就可以根据语法规则来书写“句子”(专业点的叫法应该是“表达式”),阅读者根据语法规则来阅读“句子”,这样才能做到信息的正确传递。而我们要讲的解释器模式,其实就是用来实现根据语法规则解读“句子”的解释器。可以类比中英文翻译,百度翻译就是解释器模式中定原创 2020-12-22 15:07:00 · 60 阅读 · 0 评论 -
设计模式之美笔记 —— 命令模式
设计模式之美 - 71命令模式:定义:命令模式将请求(命令)封装为一个对象,这样可以使用不同的请求 参数化其他对象(将不同请求依赖注入到其他对象),并且能够支持请求(命令)的排队执行、记录日志、撤销等(附加控制)功能。落实到代码实现上就是:命令模式用的最核心的实现手段,是将函数封装成对象。...原创 2020-12-22 14:39:28 · 61 阅读 · 0 评论 -
设计模式之美笔记 —— 备忘录模式
设计模式之美 - 70备忘录模式:应用场景:主要是用来防丢失、撤销、恢复等。定义:在不违背封装原则的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后恢复对象为先前的状态。一、备忘录模式是怎么做到不违背封装原则的备忘录模式的重点在于:不违背封装原则,思考以下两个问题:为什么存储和恢复副本会违背封装原则? 备忘录模式是如何做到不违背封装原则的?典型的备忘录模式实现代码:第一,通过快照恢复 InputText 对象,在 InputText 类中不可以定义set.原创 2020-12-22 14:32:56 · 111 阅读 · 0 评论 -
设计模式之美笔记 —— 职责链模式
设计模式之美 - 61职责链模式的定义:将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。多个处理器处理同一个请求,处理器A完成处理后,把请求交给处理器B,处理器B处理完成后,将请求处理给C职责链有两种方式:获取到可处理请求的处理器处理完成后,终止处理链条 一个请求会走完整个处理链条的每一个处理节点...原创 2020-12-16 15:30:44 · 200 阅读 · 2 评论 -
设计模式之美笔记 —— 策略模式
设计模式之美 - 60策略模式最常见的应用场景是:利用它来避免冗长的 if-else 或 switch 分支判断。策略模式定义:定义一族算法类,将每个算法分别封装起来,让它们可以互相替换。策略模式可以使算法的变化独立于使用它们的客户端(这里的客户端代指使用算法的代码)。一、策略类的定义策略类的定义比较简单,包含一个策略接口和一组实现这个接口的策略类。因为所有的策略类都实现相同的接口,所以,客户端代码基于接口而非实现编程,可以灵活地替换不同的策略。public interface ...原创 2020-12-10 18:19:07 · 123 阅读 · 0 评论 -
设计模式之美笔记 —— 模版模式
设计模式之美 - 58模板模式主要是用来解决 复用 和 扩展 两个问题。定义:模板方法模式在一个方法中定义一个算法骨架(指的是广义上的“业务逻辑”),并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。...原创 2020-12-09 17:07:54 · 105 阅读 · 1 评论 -
代理、桥接、装饰器、适配器 4 种设计模式的区别
代理模式:代理模式在不改变原始类接口的条件下,为原始类定义一个代理类,主要目的是控制访问,而非加强功能,这是它跟装饰器模式最大的不同。装饰器模式:装饰者模式在不改变原始类接口的情况下,对原始类功能进行增强,并且支持多个装饰器的嵌套使用。适配器模式:适配器模式是一种事后的补救策略。适配器提供跟原始类不同的接口,而代理模式、装饰器模式提供的都是跟原始类相同的接口。桥接模式:桥接模式的目的是将接口部分和实现部分分离,从而让它们可以较为容易、也相对独立地加以改变。...原创 2020-12-02 23:07:56 · 171 阅读 · 0 评论 -
设计模式之美笔记 —— 享元模式
设计模式之美 - 54一、享元模式的意图是复用对象,节省内存,前提是享元对象是不可变对象。享元模式意在复用缓存意在提高效率具体来讲,当一个系统中存在大量重复对象的时候,如果这些重复的对象是不可变对象,我们就可以利用享元模式将对象设计成享元,在内存中只保留一份实例,供多处代码引用。这样可以减少内存中对象的数量,起到节省内存的目的。实际上,不仅仅相同对象可以设计成享元,对于相似对象,我们也可以将这些对象中相同的部分(字段)提取出来,设计成享元,让这些大量相似对象引用这些享元。例如:...原创 2020-12-07 17:51:34 · 107 阅读 · 0 评论 -
设计模式之美笔记 —— 观察者模式
目录一、观察者模式: 观察者模式的应用场景:二、根据应用场景的不同,观察者模式会对应不同的代码实现方式:三、异步非阻塞的观察者模式 Guava EventBus框架:支持异步非阻塞模式,同时也支持同步阻塞模式四、跨进程的观察者模式 -消息队列设计模式之美 - 56一、观察者模式:在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知。观察者模式的应用场景:比如:当用户注册成功以后,我们需要为用户发放:感谢...原创 2020-12-08 15:32:51 · 139 阅读 · 0 评论 -
设计模式之美笔记 —— 组合模式
设计模式之美 - 53组合模式:主要是用来处理树形结构数据;正因为其应用场景的特殊性,数据必须能表示成树形结构,这也导致了这种模式在实际的项目开发中并不那么常用。但是,一旦数据满足树形结构,应用这种模式就能发挥很大的作用,能让代码变得非常简洁。...原创 2020-12-07 17:02:48 · 61 阅读 · 0 评论 -
设计模式之美笔记 —— 门面模式
设计模式之美 - 52门面模式:主要用于接口设计方面,目的在:如何设计接口粒度以兼顾接口的易用性和可复用性。门面接口的定义:门面模式为子系统提供一组统一的接口,定义一组高层接口让子系统更易用。假设有一个系统 A,提供了 a、b、c、d 四个接口。系统 B 完成某个业务功能,需要调用 A 系统的 a、b、d 接口。利用门面模式,我们提供一个包裹 a、b、d 接口调用的门面接口 x,给系统 B 直接使用,增强接口的易用性。门面模式的应用场景:一、解决易用性问题门面模式可以用来封装系统的.原创 2020-12-07 17:00:25 · 95 阅读 · 0 评论 -
设计模式之美笔记 —— 适配器模式
设计模式之美 - 51一、适配器模式分成两种实现方式:类适配器使用继承关系来实现,对象适配器使用组合关系来实现1、类适配器:使用继承关系来实现2、对象适配器:使用组合关系来实现二、适配器模式的应用场景1、2、3、4、5、...原创 2020-12-02 23:05:58 · 197 阅读 · 0 评论 -
设计模式之美笔记 —— 桥接模式
设计模式之美 - 49桥接模式:将抽象和实现解耦,让它们可以独立变化。JDBC的驱动是经典的桥接模式的应用,利用 JDBC 驱动来查询数据库,代码如下:Class.forName("com.mysql.jdbc.Driver");//加载及注册JDBC驱动程序String url = "jdbc:mysql://localhost:3306/sample_db?user=root&password=your_password";Connection con = DriverMan原创 2020-10-26 17:40:39 · 109 阅读 · 0 评论 -
设计模式之美笔记 —— 代理模式(动态代理)
设计模式之美 - 48代理模式(Proxy Design Pattern)的原理和代码实现都不难掌握。它在不改变原始类(或叫被代理类)代码的情况下,通过引入代理类来给原始类附加功能。原创 2020-10-26 17:07:52 · 146 阅读 · 0 评论 -
设计模式之美笔记 —— 建造者模式(Builder模式)
设计模式之美 - 46问题:直接使用构造函数或者配合 set 方法就能创建对象,为什么还需要建造者模式来创建呢? 建造者模式和工厂模式都可以创建对象,那它们两个的区别在哪里呢?原创 2020-10-23 15:54:49 · 154 阅读 · 0 评论 -
设计模式之美笔记 —— 工厂模式
设计模式之美 - 44问题:什么时候该用工厂模式? 相对于直接 new 来创建对象,用工厂模式来创建究竟有什么好处呢?有哪些创建对象的方式一、简单工厂模式如以下代码所示:这个类只负责对象的创建。这个类就是简单工厂模式类public class RuleConfigParserFactory { public static IRuleConfigParser createParser(String configFormat) { IRuleConfigParser par..原创 2020-09-29 15:52:33 · 111 阅读 · 0 评论 -
设计模式之美笔记 —— 代码规范
设计模式之美 - 31设计模式之美 - 32一、命名:原则就是以能准确达意为目标1、命名多长合适:对于局部变量,偏向于使用短命名方式;对于类名等影响范围比较大的,偏向于使用长命名来更为准确的表达意思;2、利用上下文来讲话命名:借助类名来简化变量的命名3、命名要可读、可搜索:比如查询都用select***,就不要新增query**来标识查询。便于搜索select即可获取项目中所有的查询方法。4、如何命名接口和抽象类:项目中需要统一,比如接口都是各种**Ser..原创 2020-09-22 18:00:48 · 176 阅读 · 0 评论 -
设计模式之美笔记 —— 解耦
设计模式之美 - 30“解耦”为何如此重要?如何判定代码是否需要“解耦”? 如何给代码“解耦”?一、解耦的重要性保证代码不会复杂到无法控制 提高代码的可读性和可维护性,阅读和修改代码的时候,不需要了解太多其他模块或者类的代码 提高可测试性 降低某一模块实现效率不高而造成影响的范围二、如何给代码进行解耦1、封装和抽象 可以有效地隐藏实现的复杂性,隔离实现的易变性,给依赖的模块提供稳定且易用的抽象接口。2、中间层引入中间层能简化模块或类之间的依赖关系。下面这张图是引...原创 2020-09-22 17:43:56 · 461 阅读 · 0 评论 -
面向对象的经典设计原则——KISS,YAGNI,DRY
设计模式之美 - 20怎么理解 KISS 原则中“简单”两个字? 什么样的代码才算“简单”? 怎样的代码才算“复杂”? 如何才能写出“简单”的代码? YAGNI 原则跟 KISS 原则说的是一回事吗?KISS原则Keep It Short and Simple翻译成中文就是:尽量保持简单不要使用同事可能不懂的技术来实现代码。比如前面例子中的正则表达式,还有一些编程语言中过于高级的语法等。 不要重复造轮子,要善于使用已经有的工具类库。经验证明,自己去实现这些类库,出 bug 的概率...原创 2020-09-03 10:19:36 · 320 阅读 · 0 评论 -
设计模式之美笔记 —— 接口鉴权功能 面向对象的分析与设计
设计模式之美 - 13分析功能需求:为了保证接口调用的安全性,我们希望设计实现一个接口调用鉴权功能,只有经过认证之后的系统才能调用我们的接口,没有认证过的系统调用我们的接口会被拒绝。设计模式之美 - 14设计一、划分职责进而识别出有哪些类类是现实世界中事物的一个建模,但是,并不是每个需求都能映射到现实世界,也并不是每个类都与现实世界中的事物一一对应。对于一些抽象的概念,我们是无法通过映射现实世界中的事物的方式来定义类的。推荐方法:根据需求描述,把其中涉及的功能点,一个一个...原创 2020-09-01 10:22:25 · 173 阅读 · 0 评论 -
设计模式之美笔记 —— 贫血模型,充血模型
设计模式之美 - 11贫血模型:只包含数据,不包含业务逻辑的类,就叫做贫血模型。这种模型将数据与操作分开,破坏了面向对象的封装特性,是一种典型的面向过程的编程风格。日常应用的oc2中的DO及其相对应的service层,数据和操作分开的方式。充血模型:数据和对应的业务逻辑被封装在了一个类中。满足了封装特性。基于充血模型的DDD(领域驱动设计— Domain Driven Design,简称 DDD)开发模式越来越流行了。领域驱动设计:主要是用来指导如何解耦业务系统,划分业务模块,定义业务领域的模.原创 2020-08-31 11:17:52 · 353 阅读 · 0 评论 -
设计模式之美笔记 —— 面向对象编程和面向过程编程的区别
面向对象编程:原创 2020-08-25 23:18:30 · 147 阅读 · 0 评论 -
java设计模式-单例模式
单例模式的关键代码:构造函数是私有的。要点:只有一个实例,必须自己创建自己唯一的实例,并给所有其他对象提供这一个实例。类提供了一种访问其唯一对象的方式,可以不借助实例化直接访问。优点:内存中只有一个实例,避免重复创建和消费,减少内存开销; 避免对于资源的多重占用缺点:没有接口,不能继承应用场景:生成唯一的序列号 程序中的配...原创 2020-05-17 14:43:14 · 129 阅读 · 0 评论 -
设计模式之美笔记 —— 单例模式
设计模式之美 - 41设计模式之美 - 42个人笔记问题:为什么要使用单例? 单例存在哪些问题? 单例与静态类的区别? 有何替代的解决方案?一、为什么要使用单例模式单例模式:约束一个类只可以创建一个对象(或者说实例)。1、为什么我们需要单例模式? 实战案例1:处理资源访问冲突问题 实战案例2:表示全局唯一类2、他可以解决哪些问题?...原创 2020-09-27 18:12:02 · 120 阅读 · 0 评论 -
设计模式之美笔记 —— 装饰器模式
设计模式之美 - 50原创 2020-11-27 11:28:05 · 100 阅读 · 0 评论 -
面试题-Java基础(九)- 设计模式
1、常见的设计模式 详情单例模式 观察者模式 装饰者模式 适配器模式 工厂模式 代理模式2、简单工厂模式和抽象工厂模式的区别?原创 2020-05-18 22:58:46 · 157 阅读 · 0 评论