设计模式
不是吧又500
编程就是玩
展开
-
(设计模式)总结
经典的设计模式有 23 种,分成三类,分别是:创建型:1、单例2、工厂3、建造者4、原型结构型:1、适配器2、装饰器3、门面4、享元5、代理6、组合7、桥接行为型:1、策略2、迭代器3、模板方法4、命令5、状态6、观察者7、责任链8、访问者9、中介者10、解释器11、备忘录但其实很多模式都是新瓶换旧瓶。例如:策略模式、状态模式、解释器模式、命令模式基本大同小异。所以不用太刻意去记住这些设计模式,很多设计模式都很类似,有时容易与其他设计模式混淆。虽然有些模式原创 2021-06-13 22:02:44 · 79 阅读 · 0 评论 -
(设计模式)命令
命令模式:将需要执行的流程封装成一个任务(命令),然后提交给执行器(命令执行者)执行。例如:JDK 线程池里的 Execultor 就是采用了命令模式,Executor 是命令执行者,Runnable 是命令,Executor 里的 execute 方法传入的参数就是 Runnable,如下:Runnable 负责定义任务的流程,Execultor 负责执行任务命令。模式分析:1、命令模式和策略模式,我觉得完全可以作为一种模式。根本就是新瓶换旧酒。同样都是就处理流程集中并封装到一个对象里(策略和任原创 2021-05-23 20:50:50 · 115 阅读 · 0 评论 -
(设计模式)迭代器
迭代器是用来遍历容器的工具,迭代器内部封装了容器遍历的细节。因为容器可能比较多,而且结构也可能各不相同,例如有:数组、哈希表、链表、跳表、红黑树、多路树、图等等。因此,每种容器一般都会提供各自的迭代器,用于遍历容器里的数据。每种容器都有自己的迭代器,但如果每种迭代器接口不统一,那么使用成本极高,因此每个容器的迭代器都必须统一规范。例如:JDK 的迭代器接口,主要定义三个方法,分别是 hasNext、next 和 remove。如下:在遍历容器的数据时,只需要使用其迭代器的 hasNext、next原创 2021-05-09 22:20:16 · 149 阅读 · 0 评论 -
(设计模式)策略
策略模式:针对不同的情况和场景,使用相应的处理策略。不同的策略,处理的逻辑各不相同。例如;在 JDK 的线程池配置参数里面,就有一个拒绝策略的参数。这个拒绝策略是线程池最后保险机制,一旦线程池处理请求达到饱和就会触发拒绝策略,而线程池默认的拒绝策略就是丢弃策略(AbortPolicy),除此之外还有另外三种策略,如下图:这四种拒绝策略实现 RejectedExecutionHandler 接口,该接口定义了一个 rejectedExecution 方法,所有具体拒绝策略就在该方法实现具体的逻辑。如下:原创 2021-05-07 22:40:15 · 92 阅读 · 0 评论 -
(设计模式)责任链
责任链:将每个模块负责的处理流程链接起来,形成一条链子,所有请求的数据进入这条链子时,都会由链头到链尾被链子上的各个模块处理。例如:Java EE 的 Filter(过滤链)就是责任链,所有请求都必须经过这条过滤链,每经过一个节点都会被这个节点进行处理。如果请求满足过滤条件,那么就会进入下一个过滤节点,直到到达过滤链的尾部。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L5Pc9hA2-1622986462684)(https://camo.githubuserconte原创 2021-06-06 21:34:38 · 98 阅读 · 0 评论 -
(设计模式)装饰器
装饰器模式:在原有的功能附加额外的功能,从而扩展和强化已有的功能,同时也保留着原有功能的效果。例如:JDK 的 IO 包里,就有很多装饰器的例子。如下 InputStream 的 UML 图:InputStream 是所有输入流的顶级抽象基类,其中定义了最基本的 read 方法,负责读取数据,如下:这里以 BufferedInputStream 为例,这个类除了提供读取的功能,还能将输入流缓存起来,减少数据传输的次数。从上面的 UML 可以知道 BufferedInputStream 是集成 Fi原创 2021-04-25 12:06:09 · 62 阅读 · 0 评论 -
(设计模式)模板方法
模板方法:定义好一个执行模板(骨架),然后将一些动态的流程和数值参数化,这样就可以根据不同的参数产生不同的结果。例如:JDK 的 AQS(AbstractQueueSynchronizer) 就是采用了模板方法模式。AQS 已经定义好线程同步的流程和细节,只有五个方法是没有实现的,由子类负责具体实现,这 5 各方式如下:这 5 个方法的作用就是约束线程应该以什么样的方式来获取和释放 “资源”。多线程运行时,必定面临资源不够的情况,此时 AQS 的 四个方法(try 开头)就是用于以独占还是共享的方式来原创 2021-05-30 21:11:42 · 89 阅读 · 0 评论 -
(设计模式)观察者
观察者模式:主要涉及两个对象,主题(被观察者)、观察者。如果主题发生变化,那么就会通知所有订阅该主题的观察者。例子:JDK 中有一套通用的观察者模式模板。那就是 Observable (可观察) 和 Observer (观察者),它们的关系如下:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jsZHQmHz-1621176152007)(https://ynote-resource-dl.lx.netease.com/ydl/resource?key=qqD0D39D1A原创 2021-05-16 22:42:48 · 82 阅读 · 0 评论 -
(设计模式)享元模式
原创 2021-04-18 14:10:29 · 55 阅读 · 0 评论 -
(设计模式)适配器模式
原创 2021-04-11 20:22:45 · 47 阅读 · 0 评论 -
(设计模式)桥接模式
原创 2021-04-04 17:01:05 · 61 阅读 · 0 评论 -
(设计模式)门面
原创 2021-03-21 21:32:08 · 45 阅读 · 0 评论 -
(设计模式)代理
原创 2021-03-14 11:27:16 · 61 阅读 · 0 评论 -
(设计模式)原型
原创 2021-03-07 08:14:43 · 69 阅读 · 0 评论 -
(设计模式)建造者
原创 2021-02-28 08:37:02 · 76 阅读 · 0 评论 -
(设计模式)抽象工厂
原创 2021-02-21 11:13:51 · 61 阅读 · 0 评论 -
(设计模式)单例模式
原创 2021-02-14 21:52:10 · 54 阅读 · 0 评论