![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 95
ZNineSun
大道至简,返璞归真
展开
-
第二章:Domain Primitive
在第一章中我们初步了解DDD的概念,以及DDD中经常提到的贫血和充血模型,由于 DDD 不是一套框架,而是一种架构思想,所以在代码层面缺乏了足够的约束,导致 DDD 在实际应用中上手门槛很高。让我关注DDD的原因除了公司内整个架构采用DDD的设计之外,它有一个思想Anti-Corruption Layer(防腐层)的概念,特别是其在解决外部依赖频繁变更的情况下,如何将核心业务逻辑和外部依赖隔离的机制。原创 2024-03-03 20:53:04 · 996 阅读 · 0 评论 -
Spring的事件处理机制
Component@Overridetry {LogUtil.errorLog().log("获取IP地址异常", e);return;由于一些限制,没法针对代码做逐行讲解,只能借着一个点,把相关的核心技术点讲解一下,这个核心技术点就是Spring的事件监听机制ApplicationListener。Spring中的事件处理机制是对设计模式中的观察者模式的一种扩展,它可以实现应用程序中的解耦,提高代码的可维护性和可扩展性。原创 2023-08-13 21:52:33 · 490 阅读 · 0 评论 -
还在担心代码越写越乱?试试责任链模式
责任链模式是一种行为设计模式, 允许你将请求沿着处理者链进行发送。收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止在责任链模式中,客户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求的传递过程,请求会自动进行传递。原创 2023-01-29 23:03:54 · 2784 阅读 · 2 评论 -
设计模式01——策略模式
当我们使用继承不能很好的解决问题时,比如一些行为在子类不停的改变,并且让所有的子类都有这些行为是不恰当的,可以考虑把会变化的部分取并封装起来,这样就可以保证其他部分不受影响,这样做的好处是代码变化引起的不经意后果变少,而且系统也会变得更有弹性。策略模式设计原则:针对接口编程,而不是针对实现编程所谓针对接口编程,接口是一个概念,也是java的interface的构造,“针对接口编程”关键就在于多态。利用多态,程序可以针对超类型编程,执行时会根据实际状况执行到真正的行为下面引用《设计模式》一书.原创 2021-06-08 17:59:40 · 212 阅读 · 0 评论 -
设计模式02——观察者模式
2.观察者模式2.1观察者模式的构成:2.2 定义观察者模式2.2.1 定义观察者模式:类图2.3松耦合2.3.1 设计原则2.4 接下来我们通过气象站发布天气为例来分析该模式的用法2.4.1 建立主题接口2.4.2 建立观察者接口2.4.3 建立显示接口2.4.4 建立布告板2.4.4.1 当前天气布告板2.4.4.2 天气预报布告板2.4.4.3 建立气象分析布告板2.4.5 启动气象站2.4.6 酷热指数布告板2.5 java内置的观察者模..原创 2021-06-21 15:59:51 · 190 阅读 · 0 评论 -
设计模式03—装饰者模式
1.需求来源有一家咖啡店由于店面规模的迅速扩张,他们准备更新订单系统,来符合他们的饮料供应要求,原先设计如下:购买咖啡时,也可以要求在其中加入各种调料,例如:蒸奶(Steamed Milk)、豆浆(Soy) .摩卡(Mocha,也就是巧克力风味)或覆盖奶泡。星巴兹会根据所加入的调料收取不同的费用。所以订单系统必须考虑到这些调料部分。于是在此背景下我们引入了另外一个设计的原则:类应该对外扩展开放,对修改关闭这样设计的好处就是设计具有弹性,可以应对改变,可以接受新的功能来应对改变的需求。下面我们的主原创 2021-06-29 19:04:19 · 312 阅读 · 1 评论 -
设计模式04—工厂模式
4.工厂模式针对接口编程,可以隔离掉以后系统可能发生的一大堆改变。为什么呢?如果代码是针对接口而写,那么通过多态,它可以与任何新类实现该接口。但是,当代码使用大量的具体类时,等于是自找麻烦,因为一旦加入新的具体类就必须改变代码。也就是说,你的代码并非关闭”。想用新的具体类型来扩展代码,必须重新打开它。所以当遇到这样的问题时,该怎么办?,就应该回到OO设计原则去寻找线索。我们的第一个原则用来处理改变,并帮助我们“找出会变化的方面,把它们从不变的部分分离出来”。针对这个问题我们开始识别变化的方面假设原创 2021-07-07 19:07:13 · 237 阅读 · 0 评论 -
设计模式05—单件模式
用来创建独一无二的,只能有一个实例的对象的应用场景线程池,缓存,对话框,注册表的对象,日志对象,充当打印机,显卡等为何使用单例模式我们利用静态变量,静态方法和适当的访问修饰符也可以做到这一点,但是如果我们将对象赋给一个静态变量,那么我们必须在程序一开始就要创建好这个对象,如果这个对象十分浪费内存,而且程序在执行过程中又没有用到它,就会形成浪费,而单例模式就可以很轻松的实现在需要的时候创建。剖析经典的单件模式实现public class Singleton { //利用一个静态变原创 2021-08-14 20:14:37 · 1442 阅读 · 0 评论 -
设计模式06—命令模式
命令模式用于将方法调用封装起来通过封装方法调用,我们可以把运算块包装成形。所以调用此运算的对象不需要关心事情是如何进行的,只要知道如何使用包装成形的方法来完成它就可以。通过封装方法调用,也可以做一些很聪明的事情,例如记录日志,或者重复使用这些封装来实现撒销(undo)。实际应用场景有一个遥控器可以控制家电自动化,但是这些家电不是来自于同一个厂商,可能是多个厂商,但是遥控器只有一个,可以允许遥控器可以有多个按键来控制不同的设备。但是我们又不想通过一堆if else来识别和控制这些设备,于是我们引入命原创 2021-08-17 11:26:46 · 304 阅读 · 0 评论 -
设计模式07—适配器模式与外观模式
上一篇:《命令模式》7.适配器模式与装饰者模式7.1 为什么需要适配器模式我下面举一个简单的例子帮助大家理解为何使用适配器模式如果我们欧洲的国家购买了美国生产的电脑,那么他们还需要额外的使用一个交流电的适配器,原因如下图所示:通过上图我们可以看出适配器的作用就是它位于美式插头和欧式插头中间,其工作就是将欧式插座转换成美式插座,使美式的插头可以插进去,简单来说就是适配器改变了插座的接口,已符合美式笔记本的需求。某些交流电适配器相当简单,它们只是改变插座的形状来匹配你的插头,直接把电流传送过原创 2021-10-08 08:35:48 · 306 阅读 · 0 评论 -
设计模式08—模板方法模式
上一篇 《适配器模式与外观模式》8.模板方法模式直到目前,我们的议题都绕着封装转;我们已经封装了对象创建、方法调用、复杂接口、鸭子、比萨……接下来呢我们将要深入封装算法块,好让子类可以在任何时候都可以将自己挂接进运算里。我们甚至会在本章学到一个受到好莱坞影响而启发的设计原则。其主要作用就是用于将我们的算法封装起来8.1 通过冲泡茶和冲泡咖啡来引入算法的封装茶和咖啡的冲泡方式非常相似,大致如下:接下来我们看一看冲泡咖啡的代码/** * 煮咖啡 */public class Coffee原创 2021-10-21 17:04:10 · 251 阅读 · 0 评论 -
设计模式09—迭代器与组合模式
9.迭代器与组合模式该模式用于管理良好的集合有许多种方法可以把对象堆起来成为一个集合(collec-tion)。我们可以把它们放进数组、堆栈、列表或者是散列表(Hashtable)中。每一种都有它自己的优点和适合的使用时机,但总有一个时候,你的客户想要遍历这些对象,而当他这么做时,你打算让客户看到我们的实现吗?我们当然希望最好不要!这太不专业了。没关系,不要为你的工作担心,你将在本章中学习如何能让客户遍历你的对象而又无法窥视你存储对象的方式;也将学习如何创建一些对象超集合(super collect原创 2021-11-29 19:40:09 · 471 阅读 · 0 评论