设计模式
文章平均质量分 56
讲讲个人对设计模式的理解
三易的博客
能动手就别哔哔
展开
-
创建型-适配器模式
描述 这个模式就是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。对于这个模式,有一个经常被拿来解释它的例子,就是 USB 转接头充当适配器,把两种不兼容的接口,通过转接变得可以一起工作。 实现方式 类适配器,类适配器使用继承关系来实现 对象适配器,对象适配器使用组合关系来实现 针对这两种实现方式,在实际的开发中,到底该如何选择使用哪一种呢?判断的标准主要 有两个,一个是 Adaptee 接口的个数,另一个是 Adaptee 和 ITar.原创 2021-02-20 17:43:00 · 301 阅读 · 0 评论 -
结构型-装饰器模式
描述 装饰器模式主要解决继承关系过于复杂的问题,通过组合来替代继承。它主要的作用是给原始类添加增强功能。这也是判断是否该用装饰器模式的一个重要的依据。 除此之外,装饰器模式还有一个特点,那就是可以对原始类嵌套使用多个装饰器。为了满足这个应用场景,在设计的时候,装饰器类需要跟原始类继承相同的抽象类或者接口。 代码示例 假设这样一个场景,根据 userId 获取用户数据。先从缓存中获取,如果缓存中没有,则从第三方获取并写入到缓存中。 // 定义获取用户数据接口 publicin..原创 2021-02-20 17:41:38 · 94 阅读 · 0 评论 -
结构型-桥接模式
将抽象和实现解耦,让它们可以独立变化。这里所说的“抽象”不是某个具体的抽象类或者接口,而是一类抽象类、接口或者说由多个抽象类、接口组成的这个“抽象”。而这里说的“实现”也是对“抽象”中的抽象类、接口的具体实现。 引用别人的一段话 桥接看着就像是面向接口编程这一原则的原旨—将实现与抽象分离。让我迷惑的是,让两者独立变化的说法,接口不是应该稳定吗,为什么要变化? 多个纬度独立变化那个解释倒是比较容易理解。文中举的警报的例子很贴切。紧急程度和警报的方式可以是两个不同的纬度。可以有不同的组合方式。 这与slf4原创 2021-02-20 17:39:54 · 72 阅读 · 0 评论 -
创建型-建造者模式
解决了什么问题 如果一个类中有很多属性,为了避免构造函数的参数列表过长,影响代码的可读性和易用性,我们可以通过构造函数配合 set() 方法来解决。但是,如果存在下面情况中的任意一种,我们就要考虑使用建造者模式了。 我们把类的必填属性放到构造函数中,强制创建对象的时候就设置。如果必填的属性有很多,把这些必填属性都放到构造函数中设置,那构造函数就又会出现参数列表很长的问题。如果我们把必填属性通过 set() 方法设置,那校验这些必填属性是否已经填写的逻辑就无处安放了。 如果类的属性之间有一定的依赖关系或原创 2021-02-20 17:33:54 · 73 阅读 · 0 评论 -
创建型-原型模式
注意注意,原个毛线 是什么 如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),在这种情况下,我们可以利用对已有对象(原型)进行复制(或者叫拷贝)的方式来创建新对象,以达到节省创建时间的目的。这种基于原型来创建对象的方式就叫作原型设计模式(Prototype Design Pattern),简称原型模式。 实现方法 浅拷贝:只会复制对象中基本数据类型数据和引用对象的内存地址,不会递归地复制引用对象,以及引用对象的引用对象……而深拷贝得到的是一份完完全全独立的对..原创 2021-02-20 17:28:53 · 52 阅读 · 0 评论 -
结构型-代理模式
解决什么问题 当需要在不修改一个类的前提下,对类的方法进行功能增强时,就需要使用代理模式。或者说 通过引入代理类来给原始类附加功能 应用场景 代理模式常用在业务系统中开发一些非功能性需求,比如:监控、统计、鉴权、限流、事务、幂等、日志。我们将这些附加功能与业务功能解耦,放到代理类统一处理,让程序员只需要关注业务方面的开发。除此之外,代理模式还可以用在 RPC、缓存等应用场景中。 如何实现的 静态代理,代理类 // 原始类 publicclassUser { ...原创 2021-02-20 17:24:51 · 72 阅读 · 0 评论 -
创建型-工厂模式
目录 场景假设 代码示例说明 简单工厂模式 工厂方法模式 那什么时候该用工厂方法模式,而非简单工厂模式呢? 抽象工厂 总结 场景假设 我们根据配置文件的后缀(json、xml、yaml、properties),选择不同的解析器(JsonRuleConfigParser、XmlRuleConfigParser、YamlRuleConfigParser、PropertiesRuleConfigParser),将存储在文件中的配置解析成内存对象 RuleConfig。 说明:实例代码中的I..原创 2021-02-20 17:14:33 · 74 阅读 · 0 评论 -
创建型-单例模式
定义 一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。 解决了什么问题(应用场景) 从业务概念上,有些数据在系统中只应该保存一份,就比较适合设计为单例类。比如,系统的配置信息类。 我们还可以使用单例解决资源访问冲突的问题。 如何实现 要实现一个单例,我们需要关注的点无外乎下面几个: 构造函数需要是 private 访问权限的,这样才能避免外部通过 new 创建实例; 考虑对象创建时的线程安全问题; 考虑是否支持延迟加载;..原创 2021-02-20 17:08:32 · 86 阅读 · 1 评论