
设计模式
偶像来了
这个作者很懒,什么都没留下…
展开
-
(20)设计模式-职责链模式
文章目录1. 定义2. 通用类图3. 其他1. 定义职责链模式 的英文翻译是 Chain Of Responsibility Design Pattern。将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。2. 通用类图3. 其他在职责链模式中,多个处理器依次处理同一个请求。一个请求先经过 A 处理器处理,然后再把请求传递给 B 处理器,B 处理器处理完后再传递给 C 处理器,以此类推,形成一个链原创 2020-06-24 22:28:20 · 267 阅读 · 0 评论 -
(19)设计模式-策略模式
文章目录1. 定义2. 通用类图3. 优缺点3.1 优点3.2 缺点4. 使用场景5. 总结1. 定义策略模式,英文全称是 Strategy Design Pattern。定义为:定义一族算法类,将每个算法分别封装起来,让它们可以互相替换。策略模式可以使算法的变化独立于使用它们的客户端。2. 通用类图3. 优缺点3.1 优点算法可以自由切换。避免使用多重条件判断。扩展性良好。3.2 缺点策略类数量增多。所有的策略类都需要对外暴露。4. 使用场景多个类只有在算法或行为上稍原创 2020-06-24 22:05:21 · 292 阅读 · 0 评论 -
(18)设计模式-模板模式
文章目录1. 定义2. 通用类图3. 优点4. 使用场景5. 回调的原理6. 模板模式 VS 回调1. 定义模板模式,全称是 模板方法设计模式,英文是 Template Method Design Pattern。定义为:模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。2. 通用类图注意:为了防止恶意的操作,一般模板方法都加上 final 关键字,不允许被覆写。3. 优点封庄不变部分,扩原创 2020-06-24 21:29:36 · 290 阅读 · 0 评论 -
(17)设计模式-观察者模式
文章目录1. 定义2. 通用类图3. 优缺点3.1 优点3.2 缺点4. 其他创建型设计模式主要解决 “对象的创建” 问题,结构型设计模式主要解决 “类或对象的组合或组装” 问题,那行为型设计模式主要解决的就是 “类或对象之间的交互” 问题。行为型设计模式有 观察者模式、模板模式、策略模式、职责链模式、状态模式、迭代器模式、访问者模式、备忘录模式、命令模式、解释器模式、中介模式。1. 定义观察者模式(Observer Design Pattern)也叫作发布订阅模式,定义为:定义对象间一种一对多的原创 2020-06-24 20:57:37 · 230 阅读 · 0 评论 -
(16)设计模式-享元模式
文章目录1. 定义2. 通用类图3. 优缺点4. 使用场景5. 享元模式 vs 单例、缓存、对象池5.1 享元模式跟单例的区别5.2 享元模式跟缓存的区别5.3 享元模式跟对象池的区别1. 定义享元模式(Flyweight Design Pattern)是池技术的重要实现方式。定义为:使用共享的对象可有效地支持大量的细粒度的对象。所谓 “享元”,顾名思义就是被共享的单元。享元模式的意图是复用对象,节省内存,前提是享元对象是不可变对象。2. 通用类图3. 优缺点享元模式是一个非常简单的模式,它可原创 2020-06-23 20:27:18 · 279 阅读 · 0 评论 -
(15)设计模式-组合模式
文章目录1. 定义2. 通用类图1. 定义将一组对象组织(Compose)成树形结构,以表示一种“部分 - 整体”的层次结构。组合模式也叫作合成模式,有时又叫做部分-整体模式。将对象组合成树形结构以表示 “部分-整体” 的层次结构,使得用户对单个对象和组合对象的使用具有一致性。2. 通用类图组合模式的设计思路,与其说是一种设计模式,倒不如说是对业务场景的一种数据结构和算法的抽象。其中,数据可以表示成树这种数据结构,业务需求可以通过在树上的递归遍历算法来实现。组合模式,将一组对象组织成树形结构,原创 2020-06-23 20:03:31 · 206 阅读 · 0 评论 -
(14)设计模式-门面模式
文章目录1. 定义2. 通用类图3. 优点4. 使用场景1. 定义门面模式,也叫外观模式,英文全称是 Facade Design Pattern。在 GoF 的《设计模式》一书中,门面模式是这样定义的:门面模式为子系统提供一组统一的接口,定义一组高层接口让子系统更易用。要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更容易于使用。2. 通用类图3. 优点减少系统的相互依赖提高了灵活性提高安全性4. 使用场景解决易用性问题。解原创 2020-06-23 19:51:02 · 161 阅读 · 0 评论 -
(13)设计模式-适配器模式
文章目录1. 定义2. 通用类图3. 代码4. 使用场景5. 代理、桥接、装饰器、适配器 4 种设计模式的区别1. 定义将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法一起工作的两个类能够在一起工作。适配器模式的英文翻译是 Adapter Design Pattern。顾名思义,这个模式就是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。适配器模式有两种实现方式:类适配器和对象适配器。其中,类适配器使用继承关系来实现,对原创 2020-06-22 22:38:25 · 189 阅读 · 0 评论 -
(12)设计模式-装饰器模式
文章目录1. 定义2. 通用类图3. 装饰器的优缺点3.1 优点3.2 缺点4. 装饰模式的使用场景5. 装饰器模式特殊地方1. 定义动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。Java IO 使用的就是装饰器模式。2. 通用类图3. 装饰器的优缺点3.1 优点装饰类和被装饰类可以独立发展,而不会相互耦合。装饰模式是继承关系的一个替代方案。装饰器模式可以动态地扩展一个实现类的功能。3.2 缺点多层的装饰是比较复杂的。4. 装饰模式的使用场景原创 2020-06-22 22:19:37 · 174 阅读 · 0 评论 -
(11)设计模式-桥接模式
文章目录1. 定义2. 通用类图3.优点及使用场景3.1 优点3.2 使用场景1. 定义桥接模式,也叫作 桥梁模式,英文是 Bridge Design Pattern。定义是将抽象和实现解耦,让它们可以独立变化。还有另外一种理解方式:“一个类存在两个(或多个)独立变化的维度,我们通过组合的方式,让这两个(或多个)维度可以独立进行扩展。”对于第一种 GoF 的理解方式,弄懂定义中 “抽象” 和 “实现” 两个概念,是理解它的关键。定义中的 “抽象”,指的并非 “抽象类 ”或 “接口” ,而是被抽象出来的原创 2020-06-22 21:48:21 · 250 阅读 · 0 评论 -
(10)设计模式-代理模式
文章目录1. 定义2. 通用类图3.1. 定义2. 通用类图3.原创 2020-06-22 21:24:40 · 157 阅读 · 0 评论 -
(9)设计模式-建造者模式
文章目录1. 定义2. 通用类图3. 原型模式的两种实现方法1. 定义用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),在这种情况下,可以利用对已有对象(原型)进行复制(或者叫拷贝)的方式,来创建新对象,以达到节省创建时间的目的。2. 通用类图3. 原型模式的两种实现方法原型模式有两种实现方法,深拷贝和浅拷贝。浅拷贝只会复制对象中基本数据类型数据和引用对象的内存地址,不会递归地复制引用对象,以及引用原创 2020-06-21 21:45:57 · 158 阅读 · 0 评论 -
(8)设计模式-建造者模式
文章目录1. 定义2. 类图3. 建造者模式使用场景4. 工厂模式和建造者模式区别1. 定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。英文为 Builder 模式,中文翻译为 建造者模式 或者 构建者模式,也有人叫它 生成器模式。2. 类图3. 建造者模式使用场景把类的必填属性放到构造函数中,强制创建对象的时候就设置。如果必填的属性有很多,把这些必填属性都放到构造函数中设置,那构造函数就又会出现参数列表很长的问题。如果把必填属性通过 set() 方法设置,那校原创 2020-06-19 10:46:16 · 141 阅读 · 0 评论 -
(7)设计模式-工厂模式
文章目录1. 简单工厂(Simple Factory)2. 工厂方法模式(Factory Method)3. 抽象工厂模式(Abstract Factory)工厂模式分为三种类型:简单工厂、工厂方法和抽象工厂。1. 简单工厂(Simple Factory)2. 工厂方法模式(Factory Method)3. 抽象工厂模式(Abstract Factory)...原创 2020-06-19 10:13:52 · 159 阅读 · 0 评论 -
(6)设计模式-单例设计模式
文章目录1. 什么是单例设计模式2. 为什么要使用单例3. 单例的实现3.1 饿汉式3.2 懒汉式3.3 双重检测3.4 静态内部类3.5 枚举1. 什么是单例设计模式单例设计模式(Singleton Design Pattern)理解起来非常简单。一个类只允许创建一个对象(或者叫实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。2. 为什么要使用单例从业务概念上,有些数据在系统中只应该保存一份,就比较适合设计为单例类。比如,系统的配置信息类。除此之外,还可以使用单例解决原创 2020-06-18 09:13:13 · 129 阅读 · 0 评论 -
(5)设计模式-改善代码质量的20条编程规范
文章目录1. 命名与注释1.1 命名1.2 注释2. 代码风格3. 编程技巧1. 命名与注释1.1 命名命名的关键是能准确达意。对于不同作用域的命名,我们可以适当地选择不同的长度。利用上下文简化命名。 可以借助类的信息来简化属性、函数的命名,利用函数的信息来简化函数参数的命名。命名要可读、可搜索。1.2 注释注释的目的就是让代码更容易看懂。只要符合这个要求的内容,就可以将它写到注释里。总结一下,注释的内容主要包含这样三个方面:做什么、为什么、怎么做。对于一些复杂的类和接口,可能还需要写明原创 2020-06-16 19:41:31 · 173 阅读 · 0 评论 -
(4)设计模式-重构
文章目录1. 为什么要重构(why)2. 重构什么(what)3. 什么时候重构(when)4. 如何重构(how)5. 保证重构不出错,能落地的技术手段5.1 什么是单元测试5.2 为什么要写单元测试1. 为什么要重构(why)重构是一种对软件内部结构的改善,目的是在不改变软件的可见行为的情况下,使其更易理解,修改成本更低。首先,重构是时刻保证代码质量的一个极其有效的手段,不至于让代码腐化到无可救药的地步。其次,优秀的代码或架构不是一开始就能完全设计好的,就像优秀的公司和产品也都是迭代出来的原创 2020-06-16 19:40:53 · 1557 阅读 · 0 评论 -
(3)设计模式-设计原则
文章目录单一职责原则(SRP)本文包括的设计原则有:SOLID、KISS、YAGNI、DRY、LOD 。SOLID原则分别是:单一职责原则、开闭原则、里式替换原则、接口隔离原则和依赖反转原则。单一职责原则(SRP)单一职责原则的英文是 Single Responsibility Principle,缩写为 SRP。一个类或者模块只负责完成一个职责(或者功能)。也就是说,不要设计大而全的类,要设计粒度小、功能单一的类。如何判断类的职责是否足够单一类中的代码行数、函数或属性过多,会影响代码的可原创 2020-06-14 21:35:22 · 204 阅读 · 0 评论 -
(2)设计模式-面向对象
文章目录什么是面向对象什么是面向对象原创 2020-06-07 20:37:05 · 327 阅读 · 0 评论 -
(1)设计模式-导读
文章目录1. 为什么要学习设计模式2. 评判代码好坏的维度2.1 可维护性1. 为什么要学习设计模式设计模式讲的是如何写出可扩展、可读、可维护的高质量代码。应对面试中的设计模式相关问题。告别写被人吐槽的烂代码。提高复杂代码的设计和开发能力。让读源码、学框架事半功倍。为职场发展做铺垫。2. 评判代码好坏的维度维度包括:可维护性、可读性、可扩展性、灵活性、简洁性(简单、复杂)、可复用性、可测试性。2.1 可维护性所谓的“维护”无外乎就是修改 bug、修改老的代码、添加新的代码之类的原创 2020-06-06 08:03:57 · 175 阅读 · 0 评论 -
设计模式-迭代器模式
定义提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。迭代器模式通用类图角色Iterator(迭代器)该角色负责定义按顺序逐个遍历元素的接口。ConcreteIterator(具体的迭代器)该角色负责实现 Iterator 角色所定义的接口。Aggregate(集合)该角色负责定义创建 Iterator 角色的接口。ConcreteAggregate(具体...原创 2019-04-30 15:56:55 · 101 阅读 · 0 评论 -
设计模式-建造者模式
目录定义通用类图角色Product(产品类)Builder(建造者)ConcreteBuilder(具体的建造者)Director(监工)定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。通用类图角色Product(产品类)具体的产品Builder(建造者)该角色负责定义用于生成实例的接口。ConcreteBuilder(具体的建造者)该角色是负责...原创 2019-05-13 15:23:52 · 87 阅读 · 0 评论 -
设计模式-工厂方法模式
目录定义通用类土角色Product(产品)Creator(创建者)ConcreteProduct(具体的产品)ConcreteCreator(具体的创建者)拓展方法为抽象方法方法为默认实现方法中抛异常实现定义定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。通用类土角色Product(产品)Product 角色属于框架一方,是一个抽象类。C...原创 2019-05-08 15:12:47 · 114 阅读 · 0 评论 -
设计模式-目录
目录List item原创 2019-04-30 14:19:28 · 81 阅读 · 0 评论 -
设计模式-适配器模式
定义将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式也叫作变压器模式,也叫作包装模式(Wrapper)。适配器模式分为两种:类适配器模式(使用继承的适配器)对象适配器模式(使用委托的适配器)适配器模式通用类图(1)类适配器(2)对象适配器角色...原创 2019-05-06 18:52:43 · 162 阅读 · 0 评论 -
设计模式-单例模式
目录定义通用类图实现定义确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。通用类图单例模式中,创建一个私有的静态类变量,能够保证其他类不能访问该属性,该单例类的构造方法必须私有,能够保证其他类中,不再 new Singleton() 创建一个对象。实现/*** 单例对象*/public class Singleton { //私有属性 priv...原创 2019-05-09 15:57:07 · 98 阅读 · 0 评论 -
设计模式-模板方法模式
目录定义通用类图角色AbstractClass(抽象类)ConcreteClass(具体类)实现定义定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。通用类图角色AbstractClass(抽象类)AbstractClass 角色不仅负责实现模板方法,还负责声明在模板方法中所使用到的抽象方法。ConcreteCl...原创 2019-05-07 17:36:31 · 76 阅读 · 0 评论 -
设计模式-原型模式
目录定义通用类图角色Prototype(原型)ConcretePrototype(具体的原型)Client(使用者)实现clone方法进行的是浅复制优点定义用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。通用类图角色Prototype(原型)负责定义用于复制现有实例来生成新实例的方法。ConcretePrototype(具体的原型)负责实现复制现有实例并生成新实例...原创 2019-05-13 10:26:32 · 95 阅读 · 0 评论