设计模式
文章平均质量分 94
应用层面总结设计模式
心灵彼岸-诗和远方
对一个程序员来说数据结构与算法是内功,各种技术就是招式,只有并驾齐驱方可到达巅峰!
展开
-
设计模式之十六责任链模式
前言: 责任链模式亦称:职责链模式、命令链、CoR、Chain of Command、Chain of Responsibility,是一种行为设计模式,允许你将请求沿着处理者链进行发送。收到请求后,每个处理者均可对请求进行处理,或将其传递给链上的下个处理者。 目录一、结构二、代码实现(敏感词汇过滤)三、责任链模式在开源框架中的应用3.1、Java Servlet中的应用3.2、Spring Inte...原创 2021-05-04 17:02:26 · 465 阅读 · 0 评论 -
设计模式之十五策略模式
前言: 策略模式是一种行为设计模式,它能让你定义一系列算法,并将每种算法分别放入独立的类中,以使算法的对象能够相互替换。最常见的应用场景是,利用它来避免冗长的 if-else 或 switch 分支判断。不过,它的作用还不止如此。它也可以像模板模式那样,提供框架的扩展点等等。 在 GoF 的《设计模式》定义:定义一族算法类,将每个算法分别封装起来,让它们可以互相替换。策略模式可以使算法的变化独立于使用它们的客户端。 目录一、结构...原创 2021-04-25 17:19:06 · 132 阅读 · 0 评论 -
设计模式之十四模板方法模式
前言: 模板方法模式是一种行为设计模式,它在超类中定义了一个算法的框架,允许子类在不修改结构的情况下重写算法的特定步骤。模板模式主要是用来解决复用和扩展两个问题。模板方法模式建议将算法分解为一系列步骤,然后将这些步骤改写为方法,最后在“模板方法”中依次调用这些方法。步骤可以是抽象的,也可以有一些默认的实现。为了能够使用算法,客户端需要自行提供子类并实现所有的抽象步骤。如有必要还需重写一些步骤(但这一步中不包括模板方法自身)。 GoF...原创 2021-04-25 12:00:29 · 199 阅读 · 0 评论 -
设计模式之十三观察者模式
前言: 观察者模式亦称:事件订阅者、监听者、Event-Subscriber、Listener、Observer,是一种行为设计模式,允许你定义一种订阅机制,可在对象事件发生时通知多个“观察”该对象的其他对象。根据应用场景的不同,观察者模式会对应不同的代码实现方式:有同步阻塞的实现方式,也有异步非阻塞的实现方式;有进程内的实现方式,也有跨进程的实现方式。目的是将观察者和被观察者代码解耦。 GoF 的《设计模式》定义:在对象之间定义一个一对多的依赖,当...原创 2021-04-24 09:56:04 · 175 阅读 · 0 评论 -
结构型模式总结
前言: 结构型模式介绍如何将对象和类组装成较大的结构,并同时保持结构的灵活和高效。共有7种模式,其中常用的结构型模式有:代理模式、装饰者模式、桥接模式、适配器模式,不常用的有:门面模式、组合模式、享元模式。 一、适配器模式 将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同 工作。其别名为包装器(Wrapper),主要分为二类:类适配器模式、对象适配器模式...原创 2021-04-23 09:47:41 · 407 阅读 · 0 评论 -
设计模式之十二享元模式(结构型)
前言: 享元模式亦称:缓存、Cache、Flyweight,是一种结构型设计模式,它摒弃了在每个对象中保存所有数据的方式,通过共享多个对象所共有的相同状态,让你能在有限的内存容量中载入更多对象。享元模式的意图是复用对象,节省内存,前提是享元对象是不可变对象。具体来讲,当一个系统中存在大量重复对象的时候,如果这些重复的对象是不可变对象,我们就可以利用享元模式将对象设计成享元,在内存中只保留一份实例,供多处代码引用。这样可以减少内存中对象的数量,起到节省内存的目的。实际...原创 2021-04-22 17:40:51 · 164 阅读 · 0 评论 -
设计模式之十一组合模式(结构型)
前言: 组合模式亦称:对象树、Object Tree、Composite,是一种结构型设计模式,你可以使用它将对象组合成树状结构,并且能像使用独立对象一样使用它们。组合模式解决这样的问题,当我们的要处理的对象可以生成一颗树形结构,而 我们要对树上的节点和叶子进行操作时,它能够提供一致的方式,而不用考虑 它是节点还是叶子。 --GoF 的《设计模式》定义:将一组对象组织(Compose)成树形结构,以表示一种“部分 - 整体”的层次结构。组合让客户端可以...原创 2021-04-22 15:59:53 · 140 阅读 · 0 评论 -
设计模式之十外观模式(结构型)
前言: 外观模式(Facade Design Pattern)亦称:门面模式、Facade,是一种结构型设计模式,能为程序库、框架或其他复杂类提供一个简单的接口。外观类为包含许多活动部件的复杂子系统提供一个简单的接口。与直接调用子系统相比,外观提供的功能可能比较有限,但它却包含了客户端真正关心的功能。如果你的程序需要与包含几十种功能的复杂库整合,但只需使用其中非常少的功能,那么使用外观模式会非常方便, -- GoF 的《设计模式》定义: 提...原创 2021-04-22 11:06:53 · 152 阅读 · 0 评论 -
设计模式之九代理模式(结构型)
前言: 代理模式是一种结构型设计模式,让你能够提供对象的替代品或其占位符。代理控制着对于原对象的访问,并允许在将请求提交给对象前后进行一些处理。就是客户类不再直接和委托类打交道,而是通过一个中间层来访问,而这个中间层就是代理。比如当我们想给某个类中的方法加一些额外的操作处理,就可以给这个类创建一个代理类,这个类不仅包含了原来类的方法功能,而且还在原来的基础上增加了额外的处理功能。 为什么要这样做呢?可以隐藏委托类的实现。 可以实现客户端和委托类之...原创 2021-04-21 16:17:43 · 152 阅读 · 0 评论 -
设计模式之八装饰者模式(结构型)
前言: 装饰模式是一种结构型设计模式,允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。装饰器模式主要解决继承关系过于复杂的问题,通过组合来替代继承。它主要的作用是给原始类添加增强功能。这也是判断是否该用装饰器模式的一个重要的依据。除此之外,装饰器模式还有一个特点,那就是可以对原始类嵌套使用多个装饰器。为了满足这个应用场景,在设计的时候,装饰器类需要跟原始类继承相同的抽象类或者接口。 目录一、组织机构二、代码实现三、装饰...原创 2021-04-20 15:15:33 · 219 阅读 · 2 评论 -
设计模式之七桥接模式(结构型)
前言: 桥接模式也叫作桥梁模式,英文是 Bridge Design Pattern。是一种结构型设计模式,可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构,从而能在开发时分别使用。在 GoF 的《设计模式》一书中,桥接模式是这么定义的:“Decouple an abstraction from its implementation so that the two can vary independently。”翻译成中文就是:“将抽象和实现解耦,让它们...原创 2021-04-19 15:41:38 · 323 阅读 · 0 评论 -
设计模式之六适配器模式(结构型)
前言: 适配器模式(Adapter Design Pattern)是一种结构型设计模式,它能使接口不兼容的对象能够相互合作。将某个类的接口转换成客户端期望的另一个接口表 示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同 工作。其别名为包装器(Wrapper),主要分为二类:类适配器模式、对象适配器模式,其中,类适配器使用继承关系来实现,对象适配器使用组合关系来实现。 目录一、结构1.1、对象适配器(组合)1.2、类适...原创 2021-04-16 16:04:51 · 276 阅读 · 0 评论 -
创建型模式总结
前言: 创建型设计模式包括:单例模式、抽象工厂模式、原型模式、建造者模式、工厂方法模式。它主要解决对象的创建问题,封装复杂的创建过程,解耦对象的创建代码和使用代码,能够提升已有代码的灵活性和可复用性。 目录 一、单例模式(常用) 二、工厂模式 2.1、简单工厂(常用) 2.2、工厂方法(常用) 2.3、抽象工厂(不常用) 三、建造者模式(常用) 四、原型模式(不常用) 一、...原创 2021-04-15 18:13:40 · 361 阅读 · 0 评论 -
设计模式之五生成器模式(创建型)
前言: 生成器模式,亦称设计者模式是一种创建型设计模式,使你能够分步骤创建复杂对象。该模式允许你使用相同的创建代码生成不同类型和形式的对象。 假设有这样一个复杂对象,在对其进行构造时需要对诸多成员变量和嵌套对象进行繁复的初始化工作。这些初始化代码通常深藏于一个包含众多参数且让人基本看不懂的构造函数中;甚至还有更糟糕的情况,那就是这些代码散落在客户端代码的多个位置。 生成器模式建议将对象构造代码从产品类中抽取出来,并将其放在一个...原创 2021-04-15 14:17:41 · 206 阅读 · 0 评论 -
设计模式之四原型(创建型)
前言: 原型是一种创建型设计模式,能够复制对象,甚至是复杂对象,而又无需使代码依赖它们所属的类。所有的原型类都必须有一个通用的接口,使得即使在对象所属的具体类未知的情况下也能复制对象。原型对象可以生成自身的完整副本,因为相同类的对象可以相互访问对方的私有成员变量。 目录一、结构二、代码实现2.1、克隆羊-浅拷贝2.2、克隆羊-深拷贝-重写克隆方法2.3、克隆学生-深拷贝-序列化(推荐)三、原型模式在Spring框架中源...原创 2021-04-06 16:56:45 · 201 阅读 · 0 评论 -
设计模式之三抽象工厂(创建型)
前言: 抽象工厂模式是一种创建型设计模式,它能创建一系列相关的对象,而无需指定其具体类。 一、结构原创 2021-04-06 10:54:19 · 90 阅读 · 0 评论 -
设计模式之二工厂方法模式(创建型)
前言: 工厂方法是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。工厂方法模式建议使用特殊的工厂方法代替对于对象构造函数的直接调用(即使用new运算符)。对象仍将通过new运算符创建,只是该运算符改在工厂方法中调用罢了。工厂方法返回的对象通常被称作“产品”。一、结构1.产品(Product)将会对接口进行声明。对于所有由创建者及其子类构建的对象,这些接口都是通用的。2.具体产品(Concrete Products)是产品接...原创 2021-04-05 21:12:25 · 231 阅读 · 1 评论 -
设计模式之一单例模式(创建型)
前言: Singleton是一种创建型的设计模式,可让您确保一个类只有一个实例,同时提供对该实例的全局访问点。目录一、单例模式的五种方式1.1、饿汉式(静态常量、静态代码块)1.2、懒汉式(线程不安全、线程安全)1.3、双重检查1.4、静态内部类1.5、枚举二、单例模式在JDK中的应用三、单例模式使用的场景四、单例模式的优缺点五、与其他模式的关系一、单例模式的五种方式饿汉式(静态常量、静态代码块) 懒汉式...原创 2021-04-03 22:02:30 · 105 阅读 · 1 评论 -
设计模式概述
前言: 当下会Java的人越来越多,但是一直徘徊在语言层次的程序员不在少数,真正掌握Java中接口或抽象类的应用不是很多,大家经常以那些技术只适合大型项目为由,避开或忽略它们,实际中,Java的接口或抽象类是真正体现Java思想的核心所在,这些你都将设计模式里领略到它们变幻无穷的魔力。看过很多简历上写着深刻理解面向对象,但是连基本的设计模式都描述不出来,或是说出来的也只是听说过,怎么应用大多数是说不上来的。如果说是初学者真没必要学,内力不足,没办法领略其中奥妙,如果是入行都...原创 2021-03-25 16:22:39 · 134 阅读 · 0 评论