设计模式
文章平均质量分 85
以通俗易懂的方式讲解设计模式
Xd聊架构
CSDN博客专家,Java领域优质创作者,任大厂架构师,专注Java、云原生、大数据领域
展开
-
深入理解设计模式-模板方法模式
定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。原创 2023-04-27 10:25:51 · 5551 阅读 · 15 评论 -
深入理解设计模式-适配器模式
将一个类的接口,转换成客户期望的另一个接口。适配器让原来接口不谦容的类可以合作无间。Target(目标抽象类): 目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类Adaptee(适配者类): 适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,包含了客户希望使用的业务方法,在某些情况下可能没有适配者类的源代码。原创 2023-04-24 16:52:10 · 5585 阅读 · 0 评论 -
深入理解设计模式-装饰者模式
我们先来看一个快餐店的例子。快餐店有炒面、炒饭这些快餐,可以额外附加鸡蛋、火腿、培根这些配菜,当然加配菜需要额外加钱,每个配菜的价钱通常不太一样,那么计算总价就会显得比较麻烦。使用继承的方式存在的问题:扩展性不好如果要再加一种配料(火腿肠),我们就会发现需要给FriedRice和FriedNoodles分别定义一个子类。如果要新增一个快餐品类(炒河粉)的话,就需要定义更多的子类。产生过多的子类指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式。装饰(Decorator)原创 2022-06-07 17:09:48 · 8306 阅读 · 23 评论 -
深入理解设计模式-桥接模式
现在有一个需求,需要创建不同的图形,并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系:我们可以发现有很多的类,假如我们再增加一个形状或再增加一种颜色,就需要创建更多的类。试想,在一个有多种可能会变化的维度的系统中,用继承方式会造成类爆炸,扩展起来不灵活。每次在一个维度上新增一个具体实现都要增加多个子类。为了更加灵活的设计系统,我们此时可以考虑使用桥接模式。将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。桥接(Br原创 2022-06-01 15:01:33 · 8180 阅读 · 3 评论 -
深入理解设计模式-享元模式
文章目录一、定义二、使用场景三、代码样例1.类图2.抽象享元角色3.具体享元角色3.享元工厂4.享元客户端5.输出四、优缺点五、拓展延伸1.JDK源码解析结尾一、定义运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似对象的开销,从而提高系统资源的利用率。享元(Flyweight )模式中存在以下两种状态:内部状态,即不会随着环境的改变而改变的可共享部分。外部状态,指随环境改变而改变的不可以共享的部分。享元模式的实现要领就是区分应原创 2022-05-27 10:44:34 · 8139 阅读 · 1 评论 -
深入理解设计模式-原型模式
文章目录一、定义二、使用场景三、代码样例1.类图2.简历实体类3.工作经历实体类4.客户端类4.输出四、优缺点五、两种实现方式:浅拷贝与深拷贝1.浅拷贝2.深拷贝结尾一、定义原型模式使用原型实例指定创建对象的种类,并且通过拷贝原型对象创建新的对象。原型模式本质是一种克隆对象的方法,其核心是重写Object中的clone方法,调用该方法可以在内存中进行对象拷贝。Java提供了一个标记接口——Cloneable,实现该接口完成标记,在JVM中具有这个标记的对象才有可能被拷贝。如果不实现该接口,克隆对象会原创 2022-05-19 16:23:10 · 8194 阅读 · 1 评论 -
深入理解设计模式-组合模式
文章目录一、定义二、使用场景三、代码样例1.类图2.抽象类3.具体实现类4.客户端类5.输出四、优缺点五、模式分类结尾一、定义组合模式允许我们将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。二、使用场景组合模式正是应树形结构而生,所以组合模式的使用场景就是出现树形结构的地方。比如:文件目录显示,多级原创 2022-05-12 09:34:14 · 8627 阅读 · 21 评论 -
深入理解设计模式-代理模式(静态代理、动态代理jdk和cglib)
文章目录一、定义二、使用场景三、代码样例1.类图2.静态代理3.JDK动态代理4.Cglib动态代理四、优缺点五、拓展延伸1.结尾一、定义所谓代理模式是指客户端并不直接调用实际的对象,而是通过调用代理对象,来间接的调用实际的对象。通俗的来讲代理模式就是我们生活中常见的中介。二、使用场景●热门框架源码:Spring AOP、Mybatis Mapper●权限管理、异常处理、操作日志、事务控制三、代码样例1.类图2.静态代理/** * 公共接口 */public interfac原创 2022-05-07 13:41:26 · 9183 阅读 · 6 评论 -
深入理解设计模式-抽象工厂模式
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、定义二、使用场景三、代码样例1.实体类2.产品类3.工厂类4.客户端四、优缺点结尾前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、定义二、使用场景三、代码样例1.实体类/** * 用户实体类 */public class Us.原创 2022-03-18 15:01:40 · 11002 阅读 · 37 评论 -
深入理解设计模式-策略模式(结合简单工厂、反射、Spring详细讲解)
文章目录前言一、定义二、使用场景三、代码样例1.需求2.类图3.代码四、优缺点五、延伸样例1.结合简单工厂样例2.结合反射样例3.结合Spring样例结尾前言在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等,超市促销可以釆用打折、送商品、送积分等方法。在软件开发中也常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据排序策略有冒泡排序、选择排序、插入原创 2022-03-01 17:35:42 · 11054 阅读 · 34 评论 -
深入理解设计模式-简单工厂模式(静态工厂方法模式)
文章目录一、定义二、使用场景三、代码样例1.需求2.类图3.运算操作类4.操作工厂类5.客户端类四、优缺点结尾一、定义简单工厂模式是属于创建型模式,在简单工厂模式中用于被创建实例的方法通常为静态(static)方法,因此又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。二、使用场景工厂类负责创建的对原创 2022-02-18 16:25:33 · 11110 阅读 · 9 评论 -
深入理解设计模式-工厂方法模式
文章目录前言一、定义二、使用场景三、代码样例1.需求2.类图3.工厂相关类4.产品相关类5.客户端四、优缺点结尾前言在现实生活中社会分工越来越细,越来越专业化。各种产品有专门的工厂生产,彻底告别了自给自足的小农经济时代,这大大缩短了产品的生产周期,提高了生产效率。同样,在软件开发中能否做到软件对象的生产和使用相分离呢?能否在满足“开闭原则”的前提下,客户随意增删或改变对软件相关对象的使用呢?这就是本节要讨论的问题。在简单工厂模式中,我们提到了简单工厂模式违背了开闭原则,而“工厂方法模式”是对简单工厂原创 2022-02-18 15:23:47 · 10858 阅读 · 1 评论 -
深入理解设计模式-简单工厂模式vs工厂方法模式vs抽象工厂模式对比讲解
文章目录前言一、简单工厂模式1.描述2.特点3.优缺点4.类图说明二、工厂方法模式1.描述2.特点3.适用场景4.类图说明5.简单工厂模式与工厂方法模式区别:三、抽象工厂模式1.描述2.特点3.优缺点4.类图说明结尾前言简单工厂模式、工厂方法模式、抽象工厂模式比较相像,很多同学傻傻分不清楚,本文进行详细对比说明,建议对三个模式有一定基础再进行阅读,如不了解可查看往期文章。一、简单工厂模式1.描述简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但原创 2022-02-14 10:18:12 · 11452 阅读 · 11 评论 -
深入理解设计模式-责任链模式(职责链模式)
文章目录一、定义二、使用场景三、代码样例1.需求2.设计一个所有处理器都要实现的接口3.实现各种处理器4.客户端5. 输出四、要点与优缺点结尾一、定义避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止二、使用场景一个请求需要被多个对象中的某一个处理,但是到底是哪个对象必须在运行时根据条件决定。可以看到责任链模式只有两个角色Handler所有处理器类的接口ConcreteHandler x具体的处理原创 2022-01-27 16:08:30 · 16930 阅读 · 20 评论 -
深入理解设计模式-建造者模式(生成器模式)
文章目录一、什么是建造者模式二、使用场景三、简单建造者模式四、传统建造者模式结尾一、什么是建造者模式建造者模式也称为生成器模式(英文:Builder Pattern),他可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现的对象。二、使用场景当一个类的构造函数参数个数超过4个,而且这些参数有些是可选的参数,考虑使用构造者模式。当一个类的构造函数参数超过4个,而且这些参数有些是可选的时,我们通常有两种办法来构建它的对象。 例如我们现在有如下一个类计算机类Compute原创 2022-01-26 17:16:52 · 11006 阅读 · 3 评论 -
深入理解设计模式-外观模式(门面模式)
外观模式也称为门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。外观(Facade)模式是“迪米特法则”的典型应用。原创 2022-01-21 10:41:35 · 11309 阅读 · 19 评论 -
深入理解设计模式-设计模式分类与关系
文章目录前言一、设计模式分类1.创建型模式,共五种2.结构型模式,共七种3.行为型模式,共十一种4.扩展模式二、设计模式之间的关系结尾前言设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解。正确使用设计模式具有以下优点。可以提高程序员的思维能力、编程能力和设计能力。使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期。使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强。一、设计原创 2021-12-21 15:55:37 · 11214 阅读 · 9 评论 -
UML-类图详解(依赖、关联、聚合、组合、泛化、实现)
文章目录一、UML是什么?二、类图中属性的表示方式三、类图中方法的表示方式四、类图中类关系的表示方式1、依赖(Dependence)2、关联(Association)3、聚合(Aggregation)4、组合(Composition)5、泛化(Generalization)6、实现(Realization)结尾一、UML是什么?UML,即Unified Modeling Language,翻译的意思是统一建模语言,是一种为面向对象系统的产品进行说明、可视化和编制文档的建模工具,独立于任何程序设计语言,原创 2021-11-10 17:04:16 · 16476 阅读 · 40 评论 -
深入理解设计模式-设计模式七大原则
深入理解设计模式-设计模式七大原则文章目录前言一、单一职责原则1.基本介绍2.注意事项和细节二、接口隔离原则1.基本介绍三、依赖倒转原则1.基本介绍2.注意事项和细节四、里氏替换原则1.基本介绍五、开闭原则1.基本介绍六、迪米特法则1.基本介绍2.注意事项和细节七、合成复用原则1.基本介绍结尾前言一、单一职责原则1.基本介绍对类来说的,即一个类应该只负责一项职责。如类A负责两个不同职责:职责1,职责2。 当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为 .原创 2021-05-26 10:53:07 · 10984 阅读 · 44 评论 -
深入理解设计模式-单例模式(饿汉单例模式、懒汉单例模式、双锁单例模式)
深入理解设计模式-双锁单例模式文章目录一、什么是单例模式二、应用场景三、优缺点四、代码样例总结一、什么是单例模式单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。二、应用场景 举一个例子,原创 2021-05-08 17:27:48 · 27330 阅读 · 62 评论