大型Java进阶专题(九) 设计模式之总结
前言
关于设计模式的文章就到这里了,学习这门多设计模式,你是不是有这样的疑惑,发现很多设计模式很类似,经常会混淆某些设计模式。这章节我们将对设计模式做一个总结,看看各类设计模式有什么区别。需要注意的是,设计模式在于理解,不在于形式。不要为了套用设计模式而使用设计模式,而是,在业务上遇到问题时,很自然的想到设计模式作为一种解决方案。本章节参考资料书籍《Spring 5核心原理》中的第一篇 Spring 内功心法(Spring中常用的设计模式)(如果觉得本文对你有用,请点个推荐)。
GOF 23种设计模式简介
设计模式其实一门艺术。设计模式来源于生活,不要为了套用设计模式而去使用设计模式。设计模式是在我们迷茫时提供的一种解决问题的方案,或者说用好设计模式可以防范于未然。自古以来 ,在我们人生迷茫时,我们往往都会寻求帮助,或上门咨询,或查经问典。就在几千年前,孔夫子就教给了我们怎样做人。对于中国人来说都知道:从出
生元婴、二十加冕、三十而立、四十不惑、五十知天命、六十花甲、七十古稀不逾矩、八、九十耄耋... ...我们这就是在用模板模式,当然,有些人不会选择这套模板。设计模式总结的是经验之谈,总结的是前人的经验,提供给后人去借鉴使用,前人栽树,后人乘凉。设计模式可以帮助我们提升代码的可读性、可扩展性;降低维护成本;解决复杂的业务问题,但是,千万千万不要死记硬背,生搬硬套。
设计模式之间的关联关系和对比
单例模式和工厂模式
实际业务代码中,通常会把工厂类设计为单例。
策略模式与工厂模式
1、工厂模式包含工厂方法模式和抽象工厂模式是创建型模式,策略模式属于行为型模式。
2、工厂模式主要目的是封装好创建逻辑,策略模式接收工厂创建好的对象,从而实现不同的行为。
策略模式和委派模式
1、策略模式是委派模式内部的一种实现形式,策略模式关注的结果是否能相互替代。
2、委派模式更关注分发和调度的过程。
模板方法模式和工厂方法模式
工厂方法是模板方法的一种特殊实现。对于工厂方法模式的create()方法而言,相当于只有一个步骤的模板方法模式。这一个步骤交给子类去实现。而模板方法呢,将needHomework()方法和checkHomework()方法交给子类实现,needHomework()方法和checkHomework()方法又属于父类的某一个步骤且不可变更。
模板方法模式和策略模式
1、模板方法和策略模式都有封装算法。
2、策略模式是使不同算法可以相互替换,且不影响客户端应用层的使用。
3、模板方法是针对定义一个算法的流程,将一些有细微差异的部分交给子类实现。
4、模板方法模式不能改变算法流程,策略模式可以改变算法流程且可替换。策略模式通常用来代替if...else...等条件分支语句。
装饰者模式和静态代理
1、装饰者模式关注点在于给对象动态添加方法,而代理更加注重控制对对象的访问。
2、代理模式通常会在代理类中创建被代理对象的实例,而装饰者模式通常把被装饰者作为构造参数。装饰者和代理者虽然都持有对方引用,但逻辑处理重心是不一样的。
装饰者模式和适配器模式
1、装饰者模式和适配器模式都是属于包装器模式(Wrapper Pattern)。
2、装饰者模式可以实现被装饰者与相同的接口或者继承被装饰者作为它的子类,而适配器和被适配者可以实现不同的接口。
装饰者和适配器都是对某对象的包装和扩展,属于装饰器模式的实现形式。但是装饰者需要满足OOP的is-a关系,我们也讲过煎饼的例子,不管如何包装都有共同的父类。而适配器主要解决兼容问题,不一定要统一父类,比如LoginAdapter和RegistAdapter就是兼容不同功能的两个类,但RegistForQQAdapter需要注册后自动登录,因此既继承了RegistAdpter又继承了LoginAdapter。
适配器模式和静态代理模式
适配器可以结合静态代理来实现,保存被适配对象的引用,但不是唯一的实现方式。
适配器和策略模式
在适配业务复杂的情况下,利用策略模式优化动态适配逻辑。
大型Java进阶专题(九) 设计模式之总结的更多相关文章
- 大型Java进阶专题(五) 设计模式之单例模式与原型模式
前言 今天开始我们专题的第四课了,最近公司项目忙,没时间写,今天抽空继续.上篇文章对工厂模式进行了详细的讲解,想必大家对设计模式合理运用的好处深有感触.本章节将介绍:单例模式与原型模式.本章节参考 ...
- 大型Java进阶专题(七) 设计模式之委派模式与策略模式
前言 今天开始我们专题的第七课了.本章节将介绍:你写的代码中是否觉得很臃肿,程序中有大量的if...else,想优化代码,精简程序逻辑,提升代码的可读性,这章节将介绍如何通过委派模式.策略模式让你 ...
- 大型Java进阶专题(八)设计模式之适配器模式、装饰者模式和观察者模式
前言 今天开始我们专题的第八课了.本章节将介绍:三个设计模式,适配器模式.装饰者模式和观察者模式.通过学习适配器模式,可以优雅的解决代码功能的兼容问题.另外有重构需求的人群一定需要掌握装饰者模式. ...
- 大型Java进阶专题(四) 设计模式之工厂模式
前言 今天开始我们专题的第三课了,开始对设计模式进行讲解,本章节介绍:了解设计模式的由来,介绍设计模式能帮我们解决那些问题以及剖析工厂模式的历史由来及应用场景.本章节参考资料书籍<Sprin ...
- 大型Java进阶专题(一) 前言
前言 各位读者好,本系列为Java进阶专题,为那些有一定工作经验,做了多年业务的码农,希望突破技术瓶颈,但没有形成系统的Java只是体系,缺乏清晰的提升方法和学习路径的人,比如作者本人.该课题的是 ...
- 大型Java进阶专题(六)设计模式之代理模式
代理模式 前言 又开始我的专题了,又停滞了一段时间了,加油继续吧.都知道 SpringAOP 是用代理模式实现,到底是怎么实现的?我们来一探究竟,并且自己仿真手写还原部分细节. 代理模式的应用 在生活 ...
- 大型Java进阶专题(二) 软件架构设计原则(上)
前言 今天开始我们专题的第一课了,也是我开始进阶学习的第一天,我们先从经典设计思想开始,看看大牛市如何写代码的,提升技术审美.提高核心竞争力.本章节参考资料书籍<Spring 5核心原理&g ...
- 大型Java进阶专题(三) 软件架构设计原则(下)
前言 今天开始我们专题的第二课了,本章节继续分享软件架构设计原则的下篇,将介绍:接口隔离原则.迪米特原则.里氏替换原则和合成复用原则.本章节参考资料书籍<Spring 5核心原理>中的 ...
- 大型Java进阶专题(十一) 深入理解JVM (下)
前言 前面我们了解了JVM相关的理论知识,这章节主要从实战方面,去解读JVM. 类加载机制 Java源代码经过编译器编译成字节码之后,最终都需要加载到虚拟机之后才能运行.虚拟机把描述类的数据从 ...
随机推荐
- 设计模式系列之外观模式(Facade Pattern)——提供统一的入口
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
- Java常用的文档地址
https://docs.oracle.com/en/ https://docs.oracle.com/en/java/javase/13/ specifications--->langua ...
- caffe的python接口学习(3)训练模型training
如果不进行可视化,只想得到一个最终的训练model, 那么代码非常简单,如下 : import caffe caffe.set_device(0) caffe.set_mode_gpu() solve ...
- js语法基础入门(5.1)
5.流程控制 5.1.选择结构 程序流程图 图例: 椭圆: 开始/结束 矩形: 操作 菱形: 判断 连接线: 走向 可以根据程序流程图,理清楚程序执行的流程 5.2.1.if语句 //if语句语法结构 ...
- 补充:回答网友的问题,如何不用路径,而直接将CImage画到DC中,之后DC一起显示.
补充:回答网友的问题,如何不用路径,而直接将CImage画到DC中,之后DC一起显示.注释掉 pDC->BeginPath(); // 打开路径层 pDC->Rectangle(0,0,p ...
- JAVA死锁排查-性能测试问题排查思路
死锁原因 Java发生死锁的根本原因是:在申请锁时发生了交叉闭环申请.即线程在获得了锁A并且没有释放的情况下去申请锁B,这时,另一个线程已经获得了锁B,在释放锁B之前又要先获得锁A,因此闭环发生,陷入 ...
- vx小程序(1)
一.程序配置 app.json 1. pages字段——用于描述当前小程序的页面路径. 2.window字段——定义小程序所有页面的顶部背景颜色,文字颜色等. 注意:可以在pages/logs目录下的 ...
- django 缓存(memcached)
Django提供了6种缓存方式 开发调试缓存 内存缓存 文件缓存 数据库缓存 Memcache缓存(使用python-memcached模块) Memcache缓存(使用pylibmc模块) 常使用的 ...
- 记一次开发CefSharp做浏览器时关闭页面上时未释放遇到的小问题
问题:当CefSharp放在List里,然后用了Remove移除,CefSharp是否还存在. 我将Cefsharp做成UserControl控件,然后在Main页面里采用List<UserCo ...
- 5.scrapy过滤器
scrapy过滤器 1. 过滤器 当我们在爬取网页的时候可能会遇到一个调转连接会在不同页面出现,这个时候如果我们的爬虫程序不能识别出 该链接是已经爬取过的话,就会造成一种重复不必要的爬取.所以我们要对 ...