网易首页 > 网易号 > 正文 申请入驻

23种设计模式知识点详细解析(含PDF学习资料)

0
分享至

23种设计模式知识点详细解析(含PDF学习资料)

前言:

Java 中一般认为有 23 种设计模式,我们不需要所有的都会,但是其中常用的几种设计模式应该去掌握。下面列出了所有的设计模式。虽然不需要全会,当然能掌握的越多越好。

总体来说设计模式分为三大类:

创建型模式共5种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

结构型模式共7种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式共11种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

由于篇幅的限制,没有办法把23种设计模式全部详细的分享给大家,但是整理成了Pdf资料可以分享,关注我的供种号(Java周某人)即可
一.单例模式(Singleton Pattern)

定义:

Ensure a class has only one instance, and provide a global point of accessto it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。)

通用代码(是线程安全的)

使用场景:

● 要求生成唯一序列号的环境;

● 在整个项目中需要一个共享访问点或共享数据,例如一个 Web 页面上的计数器,可以不用把每次刷新都记录到数据库中,使用单例模式保持计数器的值,并确保是线程安全的;

● 创建一个对象需要消耗的资源过多,如要访问 IO 和数据库等资源;

● 需要定义大量的静态常量和静态方法(如工具类)的环境,可以采用单例模式(当然,也可以直接声明为 static 的方式)。

线程不安全实例:

解决办法:

在 getSingleton 方法前加 synchronized 关键字,也可以在 getSingleton 方法内增加 synchronized 来实现。最优的办法是如通用代码那样写。

二.工厂模式

定义:

Define an interface for creating an object,but let subclasses decide whichclass to instantiate.Factory Method lets a class defer instantiation to subclasses.(定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。)

Product 为抽象产品类负责定义产品的共性,实现对事物最抽象的定义;Creator 为抽象创建类,也就是抽象工厂,具体如何创建产品类是由具体的实现工厂 ConcreteCreator 完成的。

具体工厂类代码:

简单工厂模式:

一个模块仅需要一个工厂类,没有必要把它产生出来,使用静态的方法

多个工厂类:

每个人种(具体的产品类)都对应了一个创建者,每个创建者独立负责创建对应的产品对象,非常符合单一职责原则

代替单例模式:

单例模式的核心要求就是在内存中只有一个对象,通过工厂方法模式也可以只在内存中生产一个对象

延迟初始化:

ProductFactory 负责产品类对象的创建工作,并且通过 prMap 变量产生一个缓存,对需要再次被重用的对象保留

使用场景:jdbc 连接数据库,硬件访问,降低对象的产生和销毁

三.抽象工厂模式(Abstract FactoryPattern)

定义:

Provide an interface for creating families of related or dependent objectswithout specifying their concrete classes.(为创建一组相关或相互依赖的对象提供 一个接口,而且无须指定它们的具体类。)

抽象工厂类代码:

使用场景:

一个对象族(或是一组没有任何关系的对象)都有相同的约束。

涉及不同操作系统的时候,都可以考虑使用抽象工厂模式

四.模板方法模式(Template MethodPattern)

定义:

Define the skeleton of an algorithm in an operation,deferring some stepstosubclasses.Template Method lets subclasses redefine certain steps of analgorithm without changing the algorithm's structure.(定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。)

AbstractClass 叫做抽象模板,它的方法分为两类:

● 基本方法

基本方法也叫做基本操作,是由子类实现的方法,并且在模板方法被调用。

● 模板方法

可以有一个或几个,一般是一个具体方法,也就是一个框架,实现对基本方法的调度,完成固定的逻辑。注意: 为了防止恶意的操作,一般模板方法都加上 final 关键字,不允许被覆写。

具体模板:

ConcreteClass1 和 ConcreteClass2 属于具体模板,实现父类所定义的一个或多个抽象方法,也就是父类定义的基本方法在子类中得以实现

使用场景:

● 多个子类有公有的方法,并且逻辑基本相同时。

● 重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由

各个子类实现。

● 重构时,模板方法模式是一个经常使用的模式,把相同的代码抽取到父类中,然后通过钩子函数(见“模板方法模式的扩展”)约束其行为。

五:建造者模式(Builder Pattern)

定义:

Separate the construction of a complex object from its representation sothat the same construction process can create different representations.(将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。)

● Product 产品类

通常是实现了模板方法模式,也就是有模板方法和基本方法,例子中的

BenzModel 和 BMWModel 就属于产品类。

● Builder 抽象建造者

规范产品的组建,一般是由子类实现。例子中的 CarBuilder 就属于抽象建造者。

● ConcreteBuilder 具体建造者

实现抽象类定义的所有方法,并且返回一个组建好的对象。例子中的 BenzBuilder和 BMWBuilder 就属于具体建造者。

● Director 导演类

负责安排已有模块的顺序,然后告诉 Builder 开始建造

使用场景:

● 相同的方法,不同的执行顺序,产生不同的事件结果时,可以采用建造者模式。

● 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时,则可以使用该模式。

● 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候使用建造者模式非常合适。

建造者模式与工厂模式的不同:

建造者模式最主要的功能是基本方法的调用顺序安排,这些基本方法已经实现了,顺序不同产生的对象也不同;工厂方法则重点是创建,创建零件是它的主要职责,组装顺序则不是它关心的。

总结:

由于篇幅的限制,没有办法把23种设计模式全部详细的分享给大家,但是整理成了Pdf资料可以分享给大家,有需要此PDF文档资料的可以找我领取,希望可以帮助到大家学习。

领取方式:关注我的供种号(Java周某人)即可

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
国运来了挡都挡不住?俄乌战争最起码给中国又争取了五年时间

国运来了挡都挡不住?俄乌战争最起码给中国又争取了五年时间

曾经年少
2024-03-05 11:38:53
网传清华大学10级毕业生生娃调查,一个不生占45.2%,二胎以上仅为5.3%

网传清华大学10级毕业生生娃调查,一个不生占45.2%,二胎以上仅为5.3%

可达鸭面面观
2024-04-29 11:31:27
昨天和中东的朋友聊巴以局势,他和我说,以色列已经准备好了

昨天和中东的朋友聊巴以局势,他和我说,以色列已经准备好了

楚楚的留香
2024-04-27 16:32:48
刚刚,中国拿下史无前例的大订单!| 地球知识局

刚刚,中国拿下史无前例的大订单!| 地球知识局

地球知识局
2024-05-01 09:13:28
女生主动起来会有多主动这届网友是真不害臊,啥都敢往外说!

女生主动起来会有多主动这届网友是真不害臊,啥都敢往外说!

韩奇
2024-05-01 22:09:13
全球学术榜单,中国跑出一匹黑马

全球学术榜单,中国跑出一匹黑马

我是娱有理
2024-05-01 07:18:30
故事:我在阿富汗外派,掀开了一位穆斯林少女的面纱,她非我不嫁

故事:我在阿富汗外派,掀开了一位穆斯林少女的面纱,她非我不嫁

潮河讲堂
2024-04-24 17:09:26
“一箭双星”宣告失败,点火8分钟后偏离轨道,24.5亿打水漂!

“一箭双星”宣告失败,点火8分钟后偏离轨道,24.5亿打水漂!

星辰故事屋
2024-03-08 21:12:51
苹果新机官宣:5月7日,正式发布

苹果新机官宣:5月7日,正式发布

奇奇怪怪的冒险
2024-05-01 08:51:01
英国王室:明天既定生死也决胜负

英国王室:明天既定生死也决胜负

王姐懒人家常菜
2024-05-01 20:26:04
无序降价、全国同频!天津楼市快逼近临界值了!

无序降价、全国同频!天津楼市快逼近临界值了!

天津365淘房
2024-04-30 10:13:47
3-1!C罗双响!炸裂神作诞生:不看球门不停球,左脚凌空抽射破门

3-1!C罗双响!炸裂神作诞生:不看球门不停球,左脚凌空抽射破门

体坛扒客
2024-05-02 06:29:50
看来又有不少大聪明,谁惹得起川A大军啊!四川多个高速成停车场

看来又有不少大聪明,谁惹得起川A大军啊!四川多个高速成停车场

阿莱美食汇
2024-05-02 00:17:07
正式官宣,辽宁男篮VS广东第二场比赛,开球时间敲定,CCTV5直播

正式官宣,辽宁男篮VS广东第二场比赛,开球时间敲定,CCTV5直播

邮轮摄影师阿嗵
2024-05-02 00:25:11
追梦:湖人未来取决于詹姆斯怎么决定 若老詹走湖人会交易浓眉吗

追梦:湖人未来取决于詹姆斯怎么决定 若老詹走湖人会交易浓眉吗

直播吧
2024-05-02 07:59:12
20辆车陷落,24人死亡!梅大高速塌方救援最新进展→

20辆车陷落,24人死亡!梅大高速塌方救援最新进展→

揭阳生活圈
2024-05-01 22:39:37
羽毛球汤尤杯1/4决赛对位赛程出炉:怕啥来啥,国羽男队先碰印度

羽毛球汤尤杯1/4决赛对位赛程出炉:怕啥来啥,国羽男队先碰印度

天涯远行人
2024-05-02 01:22:38
拙劣的吹罚,丑陋的比赛,夜久意难平——兵哥聊球第三弹

拙劣的吹罚,丑陋的比赛,夜久意难平——兵哥聊球第三弹

开心体育站
2024-05-01 14:02:42
轴承,可能让俄罗斯在战争中失败

轴承,可能让俄罗斯在战争中失败

小杨历史
2024-05-01 23:24:36
小叔子半夜来我屋,在我肚子上划了一刀,说想看看肚里孩子长啥样

小叔子半夜来我屋,在我肚子上划了一刀,说想看看肚里孩子长啥样

大花谈教育
2024-04-29 14:45:10
2024-05-02 08:36:49
JAVA周某人
JAVA周某人
致敬大师,致敬未来的你。
137文章数 1513关注度
往期回顾 全部

科技要闻

余承东卸任华为终端CEO 新任命为董事长

头条要闻

梅大高速塌陷路段建成不到10年 业内:降雨或是诱因

头条要闻

梅大高速塌陷路段建成不到10年 业内:降雨或是诱因

体育要闻

这场欧冠,多特的他诠释了什么叫"台柱子"

娱乐要闻

黄子韬被曝求婚徐艺洋 大量亲密照曝光

财经要闻

王石自动放弃2023年千万退休金

汽车要闻

预售2.89-3.49万 奔腾小马正式开启预售

态度原创

手机
旅游
艺术
数码
公开课

手机要闻

零部件供应商Skyworks声称来自iPhone的需求正在下降

旅游要闻

假期最受欢迎的小众目的地 会玩的人已经去了

艺术要闻

造科幻之物于园林 “天工开悟——夏航雕塑展”于南池子美术馆呈现

数码要闻

最强Reno!OPPO Reno12系列处理器敲定

公开课

父亲年龄越大孩子越不聪明?

无障碍浏览 进入关怀版