设计模式
文章平均质量分 76
三七有脾气
我是“三七有脾气”,一个在互联网“苟且偷生”的程序员
展开
-
设计模式系列----备忘录模式
一、什么是备忘录模式备忘录这个词汇大家应该都不陌生,我就经常使用备忘录来记录一些比较重要的或者容易遗忘的信息,与之相关的最常见的应用有许多,比如游戏存档,我们玩游戏的时候肯定有存档功能,旨在下一次登录游戏时可以从上次退出的地方继续游戏,或者对复活点进行存档,如果挂掉了则可以读取复活点的存档信息重新开始。与之相类似的就是数据库的事务回滚,或者重做日志redolog等。备忘录模式(Memento),在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存着这个状态。这样以后就可将该对象恢复到转载 2021-07-29 14:50:11 · 1927 阅读 · 0 评论 -
设计模式系列----命令模式理解
定义:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。命令模式也有四个角色:分别是命令接口(Command):一般是用于对外公布一个excute方法用来执行命令具体命令类(ConcreteCommand):一般实现命令接口,重写excute方法,声明具体的命令(如开灯,关灯之类的命令)请求者(Invoker)角色:负责调用命令对象执行请求,相关的方法叫做行动方法。接收者(Receiver)角色:负责具体实施和执行一个请求。任原创 2021-07-22 15:54:21 · 282 阅读 · 0 评论 -
设计模式系列----观察者模式理解
观察者模式的特点: 被观察者 和观察者 一般是 一对多的关系,一个被观察者对应多个观察者,当一个被观察者的状态发生改变时,被观察者通知观察者, 然后可以在观察者内部 进行业务逻辑的处理。观察者模式的使用场景:1、当面试时,如果面试官问到了消息队列的面试题,让你写一个发布订阅模式的代码,这时就可以借鉴观察者模式的代码了(真的会被这样问)。2、消息队列在哪里能用,观察者模式就能在哪里用很多人会混淆观察者模式和发布订阅模式。观察者模式本质上和发布订阅模式是一样的。观察者模式是:被观察者拥有所有观.原创 2021-07-22 11:15:11 · 294 阅读 · 0 评论 -
设计模式系列----模板方法模式理解
什么是模板方法模式模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤.模板方法的使用场景当两个类相似度极高,除了一两个方法不相同,其他的所有方法都相同时,可以通过模板方法,将相似的方法抽取出来,在抽象父类实现,不相似的方法使用abstrat修饰,强迫子类自己分别实现不相似的方法。相同的方法在父类实现了。代码例子:抽象父类//豆浆类,抽象类public abstract class SoyaMilk {转载 2021-07-20 17:40:17 · 130 阅读 · 0 评论 -
设计模式系列----组合模式理解
我想起个艺名(行走江湖必备)备选:大罗天无天哪吒三太子太子敖乙九重天天尊无量姜子牙三界道祖且长不得不承认,我是受了三太子敖丙的影响,我经常关注的这位大佬对我影响挺大的。我想着起个花名也得是封神榜里的吧,最后起了一堆中二的名字(毕竟我也才23岁,中二一点怎么了?),然后在里面选吧最终结果讨论,就用道祖且长吧...原创 2021-05-31 17:29:04 · 319 阅读 · 0 评论 -
设计模式系列----桥接模式理解
转自:http://www.jasongj.com/design_pattern/bridge/桥接模式定义桥接模式(Bridge Pattern),将抽象部分与它的实现部分分离,使它们都可以独立地变化。更容易理解的表述是:实现系统可从多种维度分类,桥接模式将各维度抽象出来,各维度独立变化,之后可通过聚合,将各维度组合起来,减少了各维度间的耦合。例讲桥接模式不必要的继承导致类爆炸汽车可按品牌分(本例中只考虑BMT,BenZ,Land Rover),也可按手动档、自动档、手自一体来分。如果对于每一种原创 2021-07-20 16:43:38 · 248 阅读 · 1 评论 -
设计模式系列----外观模式理解
外观模式看起来有点像是Java三大特性中的封装。1、外观模式的使用场景外观模式,一般用在子系统与访问之间,用于对访问屏蔽复杂的子系统调用,采用耳目一新的外观类提供的简单的调用方法,具体的实现由外观类去子系统调用。通俗的举个例子就是:我们去应聘,我们不知道如何找到面试官,不知道公司厕所在哪里,不知道面试官是否有时间。我们应聘的公司对于我们来说是完全陌生的。但是一般公司都会有一个前台,我们只需要一个前台,就可以非常了解该公司,外观模式的作用就是创建一个跟前台作用类似的类,通过前台来获取公司的情报。.原创 2021-06-30 18:18:39 · 249 阅读 · 1 评论 -
设计模式系列----适配器模式理解
1、使用场景1、适配器模式主要是用于把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能够在一起工作。2、多个组件功能类似,但接口不统一且可能会经常切换时,可使用适配器模式,使得客户端可以以统一的接口使用它们2、什么是适配器模式实际生活的例子就是家用电流220V,手机充电器,手机充电需要5V三者的关系就是,手机充电器对家用电流进行适配封装,使得输入充电器的电流是220V,而输出给手机的电流是5V。适配器模式共用三个角色:Target(手机)Adapter原创 2021-06-28 18:41:30 · 200 阅读 · 1 评论 -
设计模式系列----原型模式理解
1、使用场景老规矩,先来使用场景:原型模式主要是针对创建和实例化对象耗时较长,耗资源较多的情况,因为使用原型模式创建对象是直接在内存中拷贝,不需要使用构造器进行构造,没有初始化的过程。2、没使用原型模式User user = new User();3、一句话概括原型模式原型模式就是通过重写clone方法,实现深拷贝,通过复制实现对象的创建。4、使用原型模式public class User implements Cloneable{ private String name; priva原创 2021-06-24 09:59:37 · 168 阅读 · 2 评论 -
设计模式系列----建造者模式理解
学习任何东西,都需要先知道使用场景,知道在哪里用,什么场景用,然后才是具体的学习,不然学了不会用就尴尬了1、使用场景当一个类的构造函数参数个数超过4个,而且这些参数有些是可选的参数,考虑使用构造者模式。以上是使用场景,并且我们日常code过程中,也许就用到了建造者模式。比如在idea开发时,你开发的项目是否使用了lombok插件?这个插件相信从事Java的coder都不可避免的接触过。lombok除了最基本的@Data注解,还有一个@Builder注解,这个注解就是lombok对建造者模式的封装.原创 2021-06-23 16:34:43 · 173 阅读 · 3 评论 -
设计模式系列----简单工厂模式、工厂模式、抽象工厂模式理解
设计模式是阅读源码以及学习优秀开源项目的必备,不然当我们去阅读这些框架源码的时候会发现无从下手,因为类太多了,关系太复杂,而且很多类的命名看不懂,比如xxxBuilder 、xxxStrategy 、xxxFilter 等,一个词看不懂就可能导致你直接放弃继续阅读。这就是我尝试看源码以后,决定先学设计模式的根本原因了,塔喵太复杂了在平时编程中,构建对象最常用的方式是 new 一个对象。乍一看这种做法没什么不好,而实际上这也属于一种硬编码。每 new 一个对象,相当于调用者多知道了一个类,增加了类与类.原创 2021-05-28 10:01:13 · 195 阅读 · 1 评论 -
设计模式系列----装饰模式的理解
装饰模式提到装饰,我们先来想一下生活中有哪些装饰: 女生的首饰:戒指、耳环、项链等装饰品 家居装饰品:粘钩、镜子、壁画、盆栽等我们为什么需要这些装饰品呢?很容易想到是为了美,戒指、耳环、项链、壁画、盆栽等都是为了提高颜值或增加美观度。但粘钩、镜子不一样,它们是为了方便我们挂东西、洗漱。所以我们可以总结出装饰品共有两种功能:增强原有的特性:我们本身就是有一定颜值的,添加装饰品提高了我们的颜值。同样,房屋本身就有一定的美观度,家居装饰提高了房屋的美观度。添加新的特性:在墙上挂上粘钩,让墙壁有了挂东转载 2021-06-01 17:55:49 · 285 阅读 · 0 评论 -
设计模式系列----策略模式的理解,以及为什么要有上下文
其实策略模式是非常的简单易懂的,因为他和Java中封装太像了,其实策略模式就是对封装的进一步优化,使得封装的更加彻底,加强高内聚、低耦合的效果。策略模式在Java中的应用非常广泛,写出优秀代码基本离不开策略模式,这里我先替大家提出一个疑问:为什么要加一个上下文的类呢,直接调用代码不是更加简洁吗?带着疑问,我们往下看:策略模式的功能,就是定义了一系列的算法,这些算法定义着公共的接口,所以它们之间可以相互替换。这使得我们在开发过程中,若有新的策略需要扩展时,程序变的很容易开发。就以旅游的例子为例,.原创 2021-06-02 16:08:00 · 1197 阅读 · 5 评论 -
设计模式系列----简单工厂模式和策略工厂模式的区别
转载的博客,完美的解了我的心中之惑,学了工厂模式,学了策略模式,就傻傻分不清楚了,这篇文章也不知道是为啥,就能让人耳目一新,温故知新首先来看一下简单工厂模式: 再看一下策略模式: 看完他们的结构图,是不是有种很相似的感觉?唯一不同的就是 简单工厂类 和 Context类。接下来再看一下代码上有什么区别。 简单工厂类和Context类中代码的区别 简单工厂类: public class OperationFactory{ public static Operation C.原创 2021-06-02 16:36:03 · 708 阅读 · 0 评论 -
设计模式系列----代理模式理解
定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。举个例子来说明:假如说我现在想买一辆二手车,虽然我可以自己去找车源,做质量检测等一系列的车辆过户流程,但是这确实太浪费我得时间和精力了。我只是想买一辆车而已为什么我还要额外做这么多事呢?于是我就通过中介公司来买车,他们来给我找车源,帮我办理车辆过户流程,我只是负责选择自己喜欢的车,然后付钱就可以了。用图表示如下:1、 为什么要用代理模式?中介隔离作用:在某些情况下,一个客户类不想.转载 2021-06-10 09:53:36 · 143 阅读 · 0 评论 -
设计模式系列----责任链模式理解
转自:https://www.jianshu.com/p/9f7d9775bdda责任链模式概念责任链,顾名思义,就是用来处理相关事务责任的一条执行链,执行链上有多个节点,每个节点都有机会(条件匹配)处理请求事务,如果某个节点处理完了就可以根据实际业务需求传递给下一个节点继续处理或者返回处理完毕。场景现实中,请假的OA申请,请假天数如果是半天到1天,可能直接主管批准即可;如果是1到3天的假期,需要部门经理批准;如果是3天到30天,则需要总经理审批;大于30天,正常不会批准。为了实现上述场景转载 2021-06-08 13:45:43 · 150 阅读 · 0 评论 -
设计模式系列----单例模式的详细解读
1.单例模式简单点说,就是一个应用程序中,某个类的实例对象只有一个,你没有办法去new,因为构造器是被private修饰的,一般通过getInstance()的方法来获取它们的实例。getInstance()的返回值是一个对象的引用,并不是一个新的实例,所以不要错误的理解成多个对象。单例模式实现起来也很容易,直接看demo吧1.1 饿汉式(静态代码块)public class Singleton {private static Singleton singleton;//构造器私有化,外部不能n转载 2020-08-02 16:56:07 · 399 阅读 · 0 评论