![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式学习
文章平均质量分 83
南淮北安
好好学习
展开
-
学习设计模式之迭代模式
文章目录一、定义二、问题背景三、迭代器模式遍历组织结构1. 工程结构2. 代码实现3. 测试验证四、总结一、定义迭代器模式,常见的就是我们日常使用的iterator遍历。虽然这个设计模式在我们的实际业务开发中的场景并不多,但却几乎每天都要使用jdk为我们提供的list集合遍历。另外增强的for循环虽然是循环输出数据,但是他不是迭代器模式。迭代器模式的特点是实现Iterable接口,通过next的方式获取集合元素,同时具备对元素的删除等操作。而增强的for循环是不可以的。这种设计模式的优点是可以让我们转载 2022-05-07 10:11:00 · 382 阅读 · 0 评论 -
学习设计模式之命令模式
文章目录一、定义二、问题背景三、违背设计模式的设计实现1. 工程结构2. 代码实现四、问题改进1. 工程结构2. 代码实现3. 测试验证五、总结一、定义命令模式在我们通常的互联网开发中相对来说用的比较少,但这样的模式在我们的日常中却经常使用到,那就是Ctrl+C、Ctrl+V。当然如果你开发过一些桌面应用,也会感受到这样设计模式的应用场景。从这样的模式感受上,可以想到这是把逻辑实现与操作请求进行分离,降低耦合方便扩展。命令模式是行为模式中的一种,以数据驱动的方式将命令对象,可以使用构造函数的方式传递转载 2022-05-06 09:06:37 · 403 阅读 · 0 评论 -
学习设计模式之责任链模式
文章目录一、定义二、问题背景三、违背设计模式的设计实现1. 工程结构2. 代码实现四、问题改进1. 工程结构2. 代码实现3. 测试验证五、总结一、定义击鼓传雷,看上图你是否想起周星驰有一个电影,大家坐在海边围成一个圈,拿着一个点燃的炸弹,互相传递。责任链模式的核心是解决一组服务中的先后执行处理关系,就有点像你没钱花了,需要家庭财务支出审批,10块钱以下找闺女审批,100块钱先闺女审批在媳妇审批。你可以理解想象成当你要跳槽的时候被安排的明明白白的被各个领导签字放行二、问题背景在本案例中我们模拟转载 2022-05-05 15:47:17 · 321 阅读 · 0 评论 -
学习设计模式之代理模式
一、定义代理模式有点像老大和小弟,也有点像分销商。主要解决的是问题是为某些资源的访问、对象的类的易用操作上提供方便使用的代理服务。而这种设计思想的模式经常会出现在我们的系统中,或者你用到过的组件中,它们都提供给你一种非常简单易用的方式控制原本你需要编写很多代码的进行使用的服务类。类似这样的场景可以想到:你的数据库访问层面经常会提供一个较为基础的应用,以此来减少应用服务扩容时不至于数据库连接数暴增。使用过的一些中间件例如;RPC框架,在拿到jar包对接口的描述后,中间件会在服务启动的时候生成对应转载 2022-05-04 00:13:21 · 216 阅读 · 0 评论 -
学习设计模式之享元模式
文章目录一、定义二、问题背景三、违背设计模式的设计实现1. 工程结构2. 代码实现四、问题改进1. 工程结构2. 代码实现3. 测试验证五、总结一、定义享元模式,主要在于共享通用对象,减少内存的使用,提升系统的访问效率。而这部分共享对象通常比较耗费内存或者需要查询大量接口或者使用数据库资源,因此统一抽离作为共享对象使用另外享元模式可以分为在服务端和客户端,一般互联网H5和Web场景下大部分数据都需要服务端进行处理,比如数据库连接池的使用、多线程线程池的使用,除了这些功能外,还有些需要服务端进行包装后转载 2022-05-02 23:03:28 · 262 阅读 · 0 评论 -
学习设计模式之外观模式
文章目录一、定义二、问题背景三、违背设计模式的设计实现1. 工程结构2. 代码实现四、问题改进1. 工程结构2. 代码实现3. 测试验证五、总结一、定义外观模式也叫门面模式,主要解决的是降低调用方的使用接口的复杂逻辑组合。这样调用方与实际的接口提供方提供方提供了一个中间层,用于包装逻辑提供API接口。有些时候外观模式也被用在中间件层,对服务中的通用性复杂逻辑进行中间件层包装,让使用方可以只关心业务开发。那么这样的模式在我们的所见产品功能中也经常遇到,就像几年前我们注册一个网站时候往往要添加很多信转载 2022-05-01 17:44:02 · 165 阅读 · 0 评论 -
学习设计模式之装饰器模式
文章目录一、定义二、问题背景三、违背设计模式的设计实现1. 工程结构2. 代码实现3. 测试验证四、问题改进1. 工程结构2. 代码实现3. 测试验证五、总结一、定义初看上图感觉装饰器模式有点像俄罗斯套娃、某众汽车🚕,而装饰器的核心就是再不改原有类的基础上给类新增功能不改变原有类,可能有的小伙伴会想到继承、AOP切面,当然这些方式都可以实现,但是使用装饰器模式会是另外一种思路更为灵活,可以避免继承导致的子类过多,也可以避免AOP带来的复杂性你熟悉的场景很多用到装饰器模式new BufferedR转载 2022-04-30 22:29:19 · 286 阅读 · 0 评论 -
学习设计模式之组合模式
文章目录一、定义二、问题背景三、违背设计模式的设计实现1. 工程结构2. 代码实现3. 测试验证四、问题改进1. 工程结构2. 代码实现3. 测试验证五、总结一、定义从上图可以看到这有点像螺丝🔩和螺母,通过一堆的链接组织出一棵结构树。而这种通过把相似对象(也可以称作是方法)组合成一组可被调用的结构树对象的设计思路叫做组合模式。这种设计方式可以让你的服务组节点进行自由组合对外提供服务,例如你有三个原子校验功能(A:身份证、B:银行卡、C:手机号)服务并对外提供调用使用。有些调用方需要使用AB组合,有转载 2022-04-26 20:29:57 · 194 阅读 · 0 评论 -
学习设计模式之桥接模式
文章目录一、定义二、问题背景三、违背设计模式的设计实现四、问题改进1. 工程结构2. 代码实现3. 测试验证五、总结一、定义桥接模式的主要作用就是通过将抽象部分与实现部分分离,把多种可匹配的使用进行组合。说白了核心实现也就是在A类中含有B类接口,通过构造函数传递B类的实现,这个B类就是设计的桥。那么这样的桥接模式,在我们平常的开发中有哪些场景JDBC多种驱动程序的实现、同品牌类型的台式机和笔记本平板、业务实现中的多类接口同组过滤服务等。这些场景都比较适合使用桥接模式进行实现,因为在一些组合中如转载 2022-04-25 19:28:08 · 302 阅读 · 0 评论 -
学习设计模式之适配器模式
文章目录一、定义二、问题背景三、违背设计模式的设计实现四、问题改进五、总结一、定义二、问题背景三、违背设计模式的设计实现四、问题改进五、总结转载 2022-04-19 16:53:19 · 177 阅读 · 1 评论 -
学习设计模式之单例模式
文章目录一、定义二、问题背景三、七种单例模式实现方式五、总结一、定义单例模式是整个设计中比较简单的模式,即使没有看过设计模式的相关资料,也会经常用在实际业务的编码开发中。因为在编程开发中经常会遇到这种场景——需要保证一个类只有一个实例,哪怕多线程同时访问,而且需要提供一个全局访问此实例的点。可以总结出一条经验,单例模式主要解决的是一个全局使用的类,被频繁地创建与销毁,从而提升代码的整体性能,如图所示,孙悟空可以用猴毛实例化变出很多只猴子。二、问题背景单例模式适用的场景非常简单,是在日常开发中能遇原创 2022-04-18 10:48:04 · 459 阅读 · 0 评论 -
学习设计模式之原型模式
文章目录一、定义二、问题背景三、违背设计模式的设计实现四、问题改进五、总结一、定义二、问题背景三、违背设计模式的设计实现四、问题改进五、总结原创 2022-04-17 15:35:18 · 456 阅读 · 0 评论 -
学习设计模式之建造者模式
文章目录一、定义二、问题背景三、违背设计模式的设计实现四、问题改进五、总结一、定义建造者模式的核心目的是通过使用多个简单对象一步步地构建出一个复杂对象,通过控制操作台,一步步地组装出坦克。例如,《王者荣耀》游戏的初始化界面有道路、树木、野怪和守卫塔等。换一个场景选择其他模式时,同样会建设道路、树木、野怪和守卫塔等,但是它们的摆放位置和大小各有不同。这种初始化游戏元素的场景就可以使用建造者模式。这种根据相同的物料、不同的组装方式产生出具体内容,就是建造者模式的最终意图,即将一个复杂的构建与其表示原创 2022-04-15 20:56:40 · 463 阅读 · 0 评论 -
搞定设计模式之工厂模式一篇文章就够了!!!
文章目录一、定义二、问题背景三、违背设计模式的设计实现三、问题改进一、定义工厂模式也称简单工厂模式,是创建型设计模式的一种,这种设计模式提供了按需创建对象的最佳方式。同时,这种创建方式不会对外暴露创建细节,并且会通过一个统一的接口创建所需对象柳州动力机械厂可以生产织布机和缝纫机。它的主要意图是定义一个创建对象的接口,让其子类自己决定将哪一个工厂类实例化,工厂模式使创建过程延迟到子类中进行。简单地说,就是为了给代码结构提供扩展性,屏蔽每一个功能类中的具体实现逻辑。这种方式便于外部更加简单地调用,同原创 2021-10-17 12:48:46 · 291 阅读 · 0 评论 -
搞定设计模式之依赖倒置原则一篇文章就够了!!!
文章目录一、定义二、示例三、问题改进一、定义依赖倒置原则(Dependence Inversion Principle,DIP)是指在设计代码架构时,高层模块不应该依赖于底层模块,二者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。依赖倒置原则是实现开闭原则的重要途径之一,它降低了类之间的耦合,提高了系统的稳定性和可维护性,同时这样的代码一般更易读,且便于传承。二、示例在互联网的营销活动中,经常为了拉新和促活,会做一些抽奖活动。这些抽奖活动的规则会随着业务的不断发展而调整,如随机抽奖原创 2021-10-13 13:09:45 · 126 阅读 · 0 评论 -
搞定设计模式之接口隔离原则一篇文章就够了!!!
文章目录一、定义二、示例三、问题改进一、定义客户端不应该被迫依赖于它不使用的方法一个类对另一个类的依赖应该建立在最小的接口上接口隔离原则(Interface Segregation Principle,ISP)要求程序员尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法。接口隔离是为了高内聚、低耦合。在实际的业务开发中,通常会先定义好需要开发的接口,并由各个服务类实现。但如果没有经过考虑和设计,就很可能造成一个接口中包括众多的接口方法,而这些接口并不一定在每一个类中都原创 2021-10-12 10:03:55 · 389 阅读 · 0 评论 -
学习设计模式之迪米特法则一篇文章就够了
文章目录一、定义二、示例问题三、问题改进一、定义迪米特法则(Law of Demeter,LoD)又称为最少知道原则(LeastKnowledge Principle,LKP),是指一个对象类对于其他对象类来说,知道得越少越好。也就是说,两个类之间不要有过多的耦合关系,保持最少关联性。迪米特法则有一句经典语录:只和朋友通信,不和陌生人说话。也就是说,有内在关联的类要内聚,没有直接关系的类要低耦合。这样的例子在我们生活中也随处可见,就像家里的水管装修,有洗衣机地漏、卫生间地漏、厨房地漏,但它们最终原创 2021-10-10 21:34:10 · 176 阅读 · 0 评论 -
搞定里式替换原则的设计模式一篇文章就够了!!!
文章目录一、定义二、示例问题三、问题改进一、定义继承必须确保父类所拥有的性质在子类中仍然成立子类可以扩展父类的功能,但不能改变父类原有的功能。也就是说:当子类继承父类时,除添加新的方法且完成新增功能外,尽量不要重写父类的方法。是动作正确性的保证,即类的扩展不会给已有的系统引入新的错误,降低了代码出错的可能性。二、示例问题我们会使用各种类型的银行卡,例如储蓄卡、信用卡,还有一些其他特性的银行卡。储蓄卡和信用卡都具备一定的消费功能,但又有一些不同。例如信用卡不宜提现,如果提现可能会产生高额的利息。原创 2021-10-08 16:50:31 · 122 阅读 · 0 评论 -
搞定开闭原则的设计模式一篇文章就够了!!!
文章目录一、定义二、示例一、定义在面向对象编程领域中,开闭原则规定软件中的对象、类、模块和函数对扩展应该是开放的,但对于修改是封闭的。这意味着应该用抽象定义结构,用具体实现扩展细节,以此确保软件系统开发和维护过程的可靠性。二、示例对于外部的调用方来说,只要能体现出面向抽象编程,定义出接口并实现其方法,即不修改原有方法体,只通过继承方式进行扩展,都可以体现出开闭原则。计算三种形状的面积:长方形,三角形,圆形public interface ICalculationArea { //计算长原创 2021-10-06 22:22:28 · 169 阅读 · 0 评论 -
搞定单一职责的设计模式一篇文章就够了!!!
文章目录一、定义二、示例一、定义单一职责:单一功能,规定一个类只能有一个发生变化的原因如果要开发的功能需求,不是一次性,会随着业务的发展不断更新变化,也就是一个 Class类负责超过一个以上的职责时,会出现难以维护,扩展等各种问题二、示例比如视频网站中有:匿名访客:匿名登录普通用户:实名登录付费会员:付费用户简单功能的实现:class VideoUserService{ public void severGrade(String userType){ if (原创 2021-10-05 23:03:20 · 117 阅读 · 0 评论