
设计模式
文章平均质量分 65
Java常用23种设计模式
仲夏北斗星
这个作者很懒,什么都没留下…
展开
-
【设计模式】六大基本原则
六大设计原则是前辈们总结出来的指导思想,合理灵活的运用能帮助我们构建出优秀的系统。但千万不要唯命是从,每个系统都有自己的重点和独特之处,结合实际情况完成设计和实现,取舍有度,适合自己的才是最好的。原创 2024-08-10 15:36:55 · 881 阅读 · 0 评论 -
[设计模式] 行为型:解释器模式(Interpreter Pattern)
文章目录什么是解释器模式设计与实现规则设计代码实现什么是解释器模式解释器模式就是针对一个有规则的场景,设计一个解释器,根据定好的规则解释具体场景并得到结果的设计模式。设计一段代码,能够计算任意的加减乘除混合运算,那么这就是一个解释器。侧重业务系统架构与开发的码农,使用解释器模式的场景比较少,工作中几乎不会遇到,该模式可以不做了解,直接跳过不用再看了。解释器模式不同于以往的各种模式,不同之处不在于代码层面,而在思想层面。以前说的二十二种设计模式,侧重点都是围绕着很有代表性的业务场景,设计出高内聚低原创 2020-09-13 12:21:15 · 226 阅读 · 0 评论 -
[设计模式] 行为型:备忘录模式(Memento Pattern)
文章目录什么是备忘录模式设计与实现什么是备忘录模式备忘录模式特别好理解,就是记录下当前状态,然后在将来某个时刻,执行恢复操作,还原到当前状态。这是提前备份将来还原的思想,在生活中非常的常见。比如,操作系统装好以后,通常会备份个镜像文件,如果将来某一天系统出问题了,就拿镜像文件恢复系统。明白了要做什么,就要考虑怎么去做,针对不同业务场景,实现方案是多种多样的。所有方案的核心点就一个,备份!具体到代码层面,备份途径有很多选择,数据库、硬盘、甚至缓存、内存,都可以充当备份媒介。怎么方便怎么做,怎么简单原创 2020-09-06 22:32:28 · 219 阅读 · 0 评论 -
[设计模式] 行为型:访问者模式(Visitor Pattern)
什么是访问者模式访问者模式是个相对比较简单的模式,根据它的名字就可以判断,这个模式里面包含着两种角色:访问者、被访问者。访问者访问被访问者之后,会根据被访问者提供的信息进行自己的逻辑,我们暂且称这种行为叫做访问逻辑。访问逻辑在访问者内部定义,由被访问者提供需要的数据信息。通常来讲,在我们的常规意识里面,访问者是主动的,被访问者是被动的,访问逻辑由访问者主动发起执行。在访问者模式里面,这个常规意识恰好被颠倒过来。被访问者是主动的,访问者是被动的,访问逻辑由被访问者主动发起执行。这么说可能不太好理解,原创 2020-09-06 20:20:49 · 238 阅读 · 0 评论 -
[设计模式] 行为型:迭代器模式(Iterator Pattern)
文章目录什么是迭代器模式设计与实现什么是迭代器模式首先声明一个观点,迭代器模式已经没落了,很少再有人单独写迭代器,除非是偏底层的产品性质的开发。迭代器在各类应用框架中几乎都有涉及,现成的实现方案及应用都已经很完美了,没必要自己再去费心费力的造一个轮子。迭代器是为容器服务的,容器就是可以存放许多对象的数据结构,遍历容器中每一个对象元素,就是迭代器最主要的事情。JDK 1.2版本增加了java.util.Iterator接口,意味着 Java正式引入迭代器模式,并在此后,逐步将迭代器应用到各个容器类中原创 2020-09-05 15:37:58 · 205 阅读 · 0 评论 -
[设计模式] 行为型:中介者模式(Mediator Pattern)
文章目录什么是中介者模式设计与实现什么是中介者模式中介者模式也是顾名思义,我们需要完成某件事情,但是因为不够专业,或者不想亲自实践,就可以找个中介帮我们完成事情。中介者模式存在的意义和用途是什么呢?思考一个场景,房屋租赁,房东需要出租房子,租客需要承租房子。没有中介的情况下,房东和租客需要直接沟通洽谈,于是,一个房东需要面对很多租客,一个租客也要面对很多房东,这是个多对多的关系。现实中如果真这样,房东和租客都会比较累,需要照顾的方面太多。多对多的业务场景,映射到程序代码里面,就会导致模块或实体间原创 2020-08-30 11:59:16 · 247 阅读 · 0 评论 -
[设计模式] 行为型:观察者模式(Observer Pattern)
文章目录什么是观察者模式设计与实现主动观察者模式被动观察者模式什么是观察者模式顾名思义,观察者就是要对目标进行观察,当目标行为有所变动时,自己及时作出反应。观察的具体方法有很多种,从编程的角度来理解,观察者要达到观察的目的,主要有两种策略:观察者主动观察目标状态,实时或半实时的对目标对象进行监听,属于面向过程的编程思想观察者被动接收消息,当目标状态发生改变时,目标对象主动通知观察者,属于面向对象的编程思想我将第一种策略称之为主动观察者模式,第二种策略称之为被动观察者模式,名字是我随便取的,读原创 2020-08-30 10:00:48 · 939 阅读 · 0 评论 -
[设计模式] 行为型:状态模式(State Pattern)
什么是状态模式状态模式是针对状态机模型的编程套路,首先要知道状态机是什么。状态机是一种数学模型,用于对事物状态的变化进行描述。不说那么学术的概念了,用具体的例子来解释会更容易理解。电梯应该都知道吧,电梯工作过程可以简化为几种状态:开门状态、关门状态、运行状态、停止状态。开门状态下可以关门关门状态下可以运行或者再次开门运行状态下可以停止停止状态下可以开门或者再次运行用状态图表示就是:在现实中,电梯停止后会自动开门,我这里的状态模型把“自动化”因素给剔除了,所以停止后的电梯还有可能进入运原创 2020-08-29 16:00:36 · 322 阅读 · 0 评论 -
[设计模式] 行为型:责任链模式(Chain of Responsibility Pattern)
文章标题什么是责任链设计与实现什么是责任链责任链的思想是一种顺序流处理请求事件的机制,特别容易理解和实现。通常情况下,责任链的数据结构就像是一个链表,处理请求事件的时候,从链表中第一个元素开始,依次轮流接收并处理请求事件。如果当前节点能处理请求事件,就处理掉,返回结果消息,不再向后继续传递请求事件;如果当前节点不能处理请求事件,就把请求事件向后传递,直到有一个节点可以处理。责任链的变化非常多,比如说,一个请求事件的处理过程,可能分散在多个节点对象中,又比如说,数据结构可能不是单纯的链表结构,也可能原创 2020-07-20 23:19:46 · 224 阅读 · 0 评论 -
[设计模式] 行为型:命令模式(Command Pattern)
文章目录什么是命令模式设计与实现写在最后什么是命令模式军人以服从命令为天职!在军队里面,下级接收并执行上级的命令,就是命令模式的体现。命令,通常都是非常简明的描述,几个字,一句话,一个手势,或者一个文件,都是些很简单的信息。但是,执行命令的过程,可能很简单,也可能非常有难度。比如,命令“稍息”执行起来就很简单,命令“攻占美国”执行起来就很有挑战。在命令模式中,核心角色有三个:命令、发起者、执行者。命令是发起者和执行者之间唯一的联系,发起者将命令下达给执行者,执行者收到命令后去执行。发起者不关心命原创 2020-07-05 22:01:32 · 254 阅读 · 0 评论 -
[设计模式] 行为型:策略模式(Strategy Pattern)
文章标题什么是策略模式设计与实现总结什么是策略模式策略,就是解决问题的具体方法。针对同一个问题的不同条件,可以有多种不同的解决方法。比如,外出旅行,可选的出行方式有:汽车(省内旅行)、火车(国内旅行)、飞机(国际旅行)。每一种出行方式都是一种具体的策略,各自都有对应的选择条件。如果把这个场景用代码表示出来,最容易想到的应该就是用if...else...来实现。但是,这在编程老鸟眼里是有问题的,后期扩展性不佳。简单解释下为什么扩展性不佳,随着场景的丰富,策略选择条件可能会更复杂,也可能会增加新的策略原创 2020-07-05 12:37:28 · 317 阅读 · 0 评论 -
[设计模式] 行为型:模版方法模式(Template Method Pattern)
文章标题什么是模版方法模式设计与实现什么是模版方法模式现实生活中,模版到处都是,比如,小学生优秀作文模版,购房合同模版,还有生产各种甜品蛋糕的模具。模版就是一套约定好的规则,套用模版就可以生产出符合规则的具体事物。具体到编程领域的设计模式,模版就是抽象类的抽象方法。因为抽象方法只有声明,没有实现,非常适合规则的描述,所以前人就利用抽象类的特性,摸索出了模版方法模式。设计与实现模版方法模式是一种非常容易掌握的模式,重点就是抽象类的抽象方法,用抽象方法描述规则逻辑,用抽象类的子类将规则具体化。好原创 2020-06-22 22:29:41 · 245 阅读 · 0 评论 -
【设计模式】结构型:享元模式(Flyweight Pattern)
在面向对象编程语言中, 有一些特殊的对象,要么会频繁使用,要么会占内存,要么创建耗时。如果不考虑复用这些对象,还要反复频繁创建,就有可能会导致系统内存爆掉,或者拖累系统运行效率。因此,共享这些对象,反复利用,就是件很自然的事情,这就是享元模式。享元模式和单例模式的区别并不明显,它们的理念是互通的,而且都必须要考虑对象的线程安全性问题。享元模式、单例模式、工厂模式,很多时候都会结合着用。原创 2020-06-14 22:52:26 · 306 阅读 · 1 评论 -
【设计模式】结构型:门面模式(Facade Pattern)
简单来说,门面模式就是一个有资质且规范性较强的中介,它掌握着各种各样的资源,客户需要某个资源就直接和中介联系,中介将资源处理好以后提供给客户,客户无需关心中介和资源之间的交互。门面模式提供一个高层次的接口,使得子系统更易于使用。门面模式没有固定的编程模式,符合设计思路,能封装内部资源差异,能对外提供统一的使用规范,即可。在微服务或者多系统架构中,门面模式应用的比较多,在单服务或者单系统中,门面模式应用的比较少。这个设计模式最核心的作用就是屏蔽内部系统或模块之间的差异,对外提供统一的接口和使用方法。原创 2020-06-14 21:44:50 · 237 阅读 · 0 评论 -
【设计模式】结构型:装饰器模式(Decorator Pattern)
装饰器模式定义:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。子类继承父类,是扩展父类职责的常用手段,从代码结构上来说,这是一种纵向扩展手段。如果多个子类有相同职责:1. 要么在多个子类中写相同的职责代码,后果就是代码会有一定冗余。2. 要么在父类和多个子类之间,再加一个继承类管理职责代码,这样做会增加继承深度。既不想让代码冗余,又不想增加继承深度,就可以考虑装饰器模式,它是横向扩展对象职责的一种手段。原创 2020-06-13 18:57:01 · 280 阅读 · 0 评论 -
【设计模式】结构型:桥接模式(Bridge Pattern)
桥接模式,有的地方也叫桥梁模式,其定义是:将抽象和实现解耦,使得两者可以独立的变化。定义本身就比较抽象,不好理解,也不太好解释,但请记住,它的重点是解耦二字。不要纠结如何解释它,直接用具体案例来理解桥接模式是如何解耦代码的。原创 2020-05-20 13:14:09 · 410 阅读 · 2 评论 -
【设计模式】结构型:适配器模式(Adapter Pattern)
先理解什么是适配器。举个例子,国家电网供电,国内民用电压统一为`220V`,手机充电电压只需要`5V`,想给手机充电,就必须要有一个能把`220V`电压转换成`5V`电压的降压器,这个降压器就是手机充电器。这就是适配器模式在生活中的应用,手机充电器就是适配器,适配电压,将不能用的高电压转换成能用的低电压。原创 2020-05-18 15:52:17 · 227 阅读 · 0 评论 -
[目录] 23种设计模式学习笔记
设计原则六大基本设计原则创建型模式单例模式 原型模式 工厂模式(工厂方法、简单工厂、抽象工厂) 建造者模式结构型模式代理模式(静态代理、动态代理) 适配器模式 桥接模式 装饰器模式 外观模式 享元模式 组合模式行为型模式模版方法模式 策略模式 命令模式 责任链模式 状态模式 观察者模式 中介者模式 迭代器模式 访问者模式 备忘录模式 解释器模式...原创 2014-03-29 23:09:12 · 4738 阅读 · 0 评论 -
【设计模式】结构型:代理模式,静态代理、动态代理(Proxy Pattern)
我具备做一件事情的能力,但是我不想和太多人直接打交道,就可以找个代理挡在我的前面,代替我和其他人交流,我只和代理交流,事情最终还是我来做,这就是代理模式。火车票由铁路局印售,全国各地都有火车票代售点,你去最近的代售点就能买到你想要的车票,不用跑去铁路局,代售点就是铁路局的车票代理人,负责代理售卖火车票。在公司上班,每月都要缴纳社保,你从来没有自己去社保中心缴纳过,都是由公司人力部门代你缴纳,人力小姐姐就是你的代理人,帮你做了这件事情。原创 2020-05-15 18:10:46 · 263 阅读 · 0 评论 -
【设计模式】创建型:建造者模式(Builder Pattern)
这个设计模式就是代码世界的,和现实生活中的DIY是一个道理。比如说,我们需要一台能打游戏的高性能电脑,游戏发烧友通常不会购买市面上的电脑成品,而是自己选购零部件进行组装。对于这种结构相对固定,但属性可灵活搭配组装的对象,就很适合使用建造者模式,它的特点就是可以对目标对象进行高度自由的定制化。原创 2020-05-14 14:29:02 · 290 阅读 · 1 评论 -
【设计模式】创建型:工厂方法模式、简单工厂模式、抽象工厂模式(Factory Pattern)
工厂模式很实用,网上各种教学和讲解,光是定义就有三个:工厂方法模式、简单工厂模式、抽象工厂模式。从我的经验来看,很多人会用工厂模式,但是对其理解有所欠缺,特别是三种定义之间的区别,总会有一点疑惑。我也来讲述一下我对工厂模式的理解,一起从头再来认真的过一遍,别人说的不一定对,我说的你就姑且听之。思考,如果要写毛笔字,怎么得到宣纸?自己掌握造纸工艺,寻找材料,一步步制作,最后生产出宣纸。直接前往造纸厂,购买满足自己需求的成品宣纸。原创 2020-05-13 21:33:09 · 1220 阅读 · 3 评论 -
【设计模式】创建型:原型模式(Prototype Pattern)
听说过克隆吧,通俗点说,就是复制,把一个已经存在的对象当作原型,克隆出一个跟它相同的对象,这就是原型模式。原型对象通常都是经历过初始化操作已经含有一些数据的对象,复制它就是为了省去重新初始化的过程,从而快速得到一个有目标数据的对象。浅克隆:只克隆原型对象自身,原型对象内部持有的其它对象不可隆,但是会保留对象引用。深克隆:不仅克隆原型对象自身,还克隆原型对象内部持有的其它对象。使用时,选择浅克隆还是深克隆,要根据业务场景来判断,千万不能乱用!原型模式是一个很简单的设计模式,清楚理解浅克隆和深克隆。原创 2020-05-09 15:35:57 · 358 阅读 · 0 评论 -
【设计模式】创建型:单例模式(Singleton Pattern)
单例,就是单个对象单个实例的意思,是指在系统运行期间,某个对象类型最多只会创建出一个实例,创建和管理单例对象的方法就是单例模式。选择使用单例对象的原因,通常都是因为创建这种对象的成本比较高,要么是很费时间,要么是很费资源。所以,就创建一个这样的对象,反复使用它就好了,能节约很多时间和资源。通常,单例对象的生命周期都会比一般对象要长,一旦创建好了就常驻内存,随用随取。单例对象可以有作用域的概念,比如,限定一个进程内只能有一个单例,或者一个线程内只能有一个单例,也可以将作用域和HTTP。原创 2020-05-06 10:25:50 · 408 阅读 · 0 评论