
设计模式
文章平均质量分 73
爪哇_克劳德_武汉
于无声处响惊雷
展开
-
java23种设计模式(二十三) -- 解释器模式(行为设计模式)
解释器模式简介解释器模式是类的行为模式。给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。解释器模式是指给定一个使用规定格式和语法的语言,并且建立一个解释器来解释该语言中的句子。解释器本身就是一种按照规定的语法进行解析的方案,但是总体来说也是一种使用频率相对较低但学习难度较大的设计模式。结构抽象表达式(Expression)角色:声明一个所有的具体表达式角色都需要实现的抽象接口。这个接口主要是一个interpret()方原创 2021-11-29 10:14:01 · 283 阅读 · 0 评论 -
java23种设计模式(二十二) -- 访问者模式(行为设计模式)
访问者模式简介访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。意图:主要将数据结构与数据操作分离。主要解决:稳定的数据结构和易变的操作耦合问题。何时使用:需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作"污染"这些对象的类,使用访问者模式将这些封装到类中。角色Visitor(抽象访问者):抽象访问者为对象结构中每一个具体元素类ConcreteElement声明一个访问操作,从这个操作的名称原创 2021-11-26 10:31:00 · 187 阅读 · 0 评论 -
java23种设计模式(二十一) -- 模板模式(行为设计模式)
模板模式简介模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。结构模板方法模式是所有模式中最为常见的几个模式之一,是基于继承的代码复用的基本技术。模板方法模式需要开发抽象类和具体子类的设计师之间的协作。一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤。代表这些具体逻辑步骤的方法原创 2021-11-25 14:44:20 · 226 阅读 · 0 评论 -
java23种设计模式(二十) -- 策略模式(行为设计模式)
策略模式简介策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。下面就以一个示意性的实现讲解策略模式实例的结构。角色环境(Context)角色:持有一个Strategy的引用。抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。原创 2021-11-25 11:02:11 · 170 阅读 · 0 评论 -
java23种设计模式(十九) -- 状态模式(行为设计模式)
状态模式简介状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。角色结构状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式的示意性类图如下所示:状态模式所涉及到的角色有:环境(Context)角色,也称上下文:定原创 2021-11-25 10:26:00 · 588 阅读 · 0 评论 -
java23种设计模式(十八) -- 观察者模式(行为设计模式)
观察者模式简介定义在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。大白话其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。角色抽象被观察者角色:也就是一个抽象主题,它把所有对观察者对象的引用保存在一个集合中,每个主题都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。抽象观察者角色:为所有的具体观察者定义一个接口,在得到主题通知时更新自己。具体被观原创 2021-11-24 16:12:38 · 149 阅读 · 0 评论 -
java23种设计模式(十七) -- 备忘录模式(行为设计模式)
备忘录模式简介备忘录模式是以可以恢复或者说回滚,配置、版本、悔棋为核心功能的设计模式,而这种设计模式属于行为模式。在功能实现上是以不破坏原对象为基础增加备忘录操作类,记录原对象的行为从而实现备忘录模式。这个设计在我们平常的生活或者开发中也是比较常见的,比如:后悔药、孟婆汤(一下回滚到0),IDEA编辑和撤销、小霸王游戏机存档。当然还有我们非常常见的Photoshop角色构成原发器类(Originator):创建一个备忘录对象,使用备忘录存储它的内部状态。负责人类(CareTaker):负责保存好原创 2021-11-24 11:09:23 · 154 阅读 · 0 评论 -
java23种设计模式(十六) -- 中介者模式(行为设计模式)
中介者模式简介中介者模式要解决的就是复杂功能应用之间的重复调用,在这中间添加一层中介者包装服务,对外提供简单、通用、易扩展的服务能力。这样的设计模式几乎在我们日常生活和实际业务开发中都会见到,例如;飞机????降落有小姐姐在塔台喊话、无论哪个方向来的候车都从站台上下、公司的系统中有一个中台专门为你包装所有接口和提供统一的服务等等,这些都运用了中介者模式。除此之外,你用到的一些中间件,他们包装了底层多种数据库的差异化,提供非常简单的方式进行使用。例如下面这个结构,如果每个元素两两之间要产生联系,关系就原创 2021-11-24 10:05:14 · 497 阅读 · 0 评论 -
java23种设计模式(十五) -- 迭代器模式(行为设计模式)
迭代器模式介绍迭代器模式,常见的就是我们日常使用的iterator遍历。虽然这个设计模式在我们的实际业务开发中的场景并不多,但却几乎每天都要使用jdk为我们提供的list集合遍历。另外增强的for循环虽然是循环输出数据,但是他不是迭代器模式。迭代器模式的特点是实现Iterable接口,通过next的方式获取集合元素,同时具备对元素的删除等操作。而增强的for循环是不可以的。这种设计模式的优点是可以让我们以相同的方式,遍历不同的数据结构元素,这些数据结构包括;数组、链表、树等,而用户在使用遍历的时候并不原创 2021-11-23 11:16:32 · 159 阅读 · 0 评论 -
java23种设计模式(十四) -- 命令模式(行为设计模式)
命令模式介绍命令模式在我们通常的互联网开发中相对来说用的比较少,但这样的模式在我们的日常中却经常使用到,那就是Ctrl+C、Ctrl+V。当然如果你开发过一些桌面应用,也会感受到这样设计模式的应用场景。从这样的模式感受上,可以想到这是把逻辑实现与操作请求进行分离,降低耦合方便扩展。命令模式是行为模式中的一种,以数据驱动的方式将命令对象,可以使用构造函数的方式传递给调用者。调用者再提供相应的实现为命令执行提供操作方法。可能会感觉这部分有一些饶,可以通过对代码的实现进行理解,在通过实操来熟练。在这个设计原创 2021-11-23 09:59:47 · 425 阅读 · 0 评论 -
java23种设计模式(十三) -- 责任链模式(行为设计模式)
责任链模式简介责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。举例击鼓传花是一种热闹而又紧张的饮酒游戏。在酒宴上宾客依次坐定位置,由一人击鼓,击鼓的地方与传花的地方是分开的,以示公正。开始击鼓时,花束就开始依次传递,鼓声一落,如果花束在某人手中,则该人就得饮酒。比如原创 2021-10-26 16:54:11 · 158 阅读 · 0 评论 -
java23种设计模式(十二) -- 代理模式(结构型设计模式)
代理模式简介代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法举个例子来说明代理的作用:假设我们想邀请一位明星,那么并不是直接连接明星,而是联系明星的经纪人,来达到同样的目的.明星就是一个目标对象,他只要负责活动中的节目,而其他琐碎的事情就交给他的代理人(经纪原创 2021-10-26 14:20:03 · 156 阅读 · 0 评论 -
java23种设计模式(十一) -- 享元模式(结构型设计模式)
享元模式介绍享元模式,主要在于共享通用对象,减少内存的使用,提升系统的访问效率。而这部分共享对象通常比较耗费内存或者需要查询大量接口或者使用数据库资源,因此统一抽离作为共享对象使用。另外享元模式可以分为在服务端和客户端,一般互联网H5和Web场景下大部分数据都需要服务端进行处理,比如数据库连接池的使用、多线程线程池的使用,除了这些功能外,还有些需要服务端进行包装后的处理下发给客户端,因为服务端需要做享元处理。但在一些游戏场景下,很多都是客户端需要进行渲染地图效果,比如;树木、花草、鱼虫,通过设置不同元原创 2021-10-25 15:20:19 · 381 阅读 · 0 评论 -
java23种设计模式(十) -- 外观模式(结构型设计模式)
外观模式概念介绍外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。角色及使用场景简单来说,该模式就是把一些复杂的流程封装成一个接口供给外部用户更简单的使用。这个模式中,设计到3个角色。门面角色:外观模式的核心。它被客户角色调用,它熟悉子系统的功能。内部根据客户角色的需求预定了几种功能的组合。子系统角色:实现了子系统的功能。它对客户角色和原创 2021-10-25 11:18:37 · 151 阅读 · 0 评论 -
java23种设计模式(九) -- 装饰器模式(结构型设计模式)
装饰器模式简介Decorator装饰器,顾名思义,就是动态地给一个对象添加一些额外的职责,就好比为房子进行装修一样。因此,装饰器模式具有如下的特征: 它必须具有一个装饰的对象。 它必须拥有与被装饰对象相同的接口。 它可以给被装饰对象添加额外的功能。用一句话总结就是:保持接口,增强性能。装饰器通过包装一个装饰对象来扩展其功能,而又不改变其接口,这实际上是基于对象的适配器模式的一种变种。它与对象的适配器模式的异同点如下。 相同点:都拥有一个目标对象。原创 2021-10-22 15:26:08 · 156 阅读 · 0 评论 -
java23种设计模式(八) -- 组合模式(结构型设计模式)
组合模式简介用面向对象的方式来处理树形结构组合多个对象形成树形结构以表示具有“整体-部分”关系的层次结构。在组合模式中引入了抽象构件类Component,它是所有容器类和叶子类的公共父类。角色 Component抽象构件 可以是接口或抽象类 为叶子构件和容器构件对象声明接口 Leaf叶子构件 叶子节点没有子节点 Composite容器构件 容器节点包含子节点,其子节点可以是叶子节点,也可以是容器节点。组合模式,就是在一个对象中包含其他对象,这些被包含的对象可能是终点对象(原创 2021-10-22 10:41:25 · 321 阅读 · 0 评论 -
java23种设计模式(七) -- 桥接模式(结构型设计模式)
桥接模式介绍桥接模式的主要作用就是通过将抽象部分与实现部分分离,把多种可匹配的使用进行组合。说白了核心实现也就是在A类中含有B类接口,通过构造函数传递B类的实现,这个B类就是设计的桥。桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。通俗来讲,桥接是一个接口,它与一方应该是绑定的,原创 2021-10-20 15:26:18 · 170 阅读 · 0 评论 -
java23种设计模式(六) -- 适配器模式(结构型设计模式)
适配器模式基本介绍适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)适配器模式属于结构型模式主要分为三类:类适配器模式、对象适配器模式、接口适配器模式工作原理适配器模式:将一个类的接口转换成另一种接口.让原本接口不兼容的类可以兼容从用户的角度看不到被适配者,是解耦的用户调用适配器转化出来的目标接口方法,适配器再调用被适配者原创 2021-10-20 13:51:46 · 147 阅读 · 0 评论 -
java23种设计模式(五) -- 单例模式(创建型设计模式)
单例模式介绍单例模式可以说是整个设计中最简单的模式之一,而且这种方式即使在没有看设计模式相关资料也会常用在编码开发中。因为在编程开发中经常会遇到这样一种场景,那就是需要保证一个类只有一个实例哪怕多线程同时访问,并需要提供一个全局访问此实例的点。综上以及我们平常的开发中,可以总结一条经验,单例模式主要解决的是,一个全局使用的类频繁的创建和消费,从而提升提升整体的代码的性能。8种单例模式实现静态类使用/** * [静态类使用] * 以上这种方式在我们平常的业务开发中非常场常见,这样静态类的原创 2021-10-19 15:48:53 · 1660 阅读 · 0 评论 -
java23种设计模式(四) -- 原型模式(创建型设计模式)
原型模式简介原型模式主要解决的问题就是创建大量重复的类,而我们模拟的场景就需要给不同的用户都创建相同的试卷,但这些试卷的题目不便于每次都从库中获取,甚至有时候需要从远程的RPC中获取。这样都是非常耗时的,而且随着创建对象的增多将严重影响效率。在原型模式中所需要的非常重要的手段就是克隆,在需要用到克隆的类中都需要实现implements Cloneable 接口。原型模式特点由原型对象自身创建目标对象。也就是说,对象创建这一动作发自原型对象本身。目标对象是原型对象的一个克隆。也就是说,通过原型模原创 2021-10-19 15:13:26 · 170 阅读 · 0 评论 -
java23种设计模式(三) -- 建造者模式(创建型设计模式)
建造者模式简介建造者模式主要解决的问题是在软件系统中,有时候面临着”一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的过程构成;由于需求的变化,这个复杂对象的各个部分经常面临着重大的变化,但是将它们组合在一起的过程却相对稳定。结构在这个示意性的系统里,最终产品Product只有两个零件,即part1和part2。相应的建造方法也有两个:buildPart1()和buildPart2()、同时可以看出本模式涉及到四个角色,它们分别是:抽象建造者(Builder)角色:给出一个抽象接口,以规原创 2021-10-19 10:38:55 · 151 阅读 · 0 评论 -
java23种设计模式(二) -- 抽象工厂模式(创建型设计模式)
抽象工厂模式介绍抽象工厂模式与工厂方法模式虽然主要意图都是为了解决,接口选择问题。但在实现上,抽象工厂是一个中心工厂,创建其他工厂的模式。多个抽象产品类,派生出多个具体产品类;一个抽象工厂类,派生出多个具体工厂类;每个具体工厂类可创建多个具体产品类的实例。即提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们的具体的类。“一对多”的关系。类结构图:代码示例项目目录结构/** * 水果抽象接口 */public interface Fruit { void fruitI原创 2021-10-18 13:50:03 · 193 阅读 · 2 评论 -
java23种设计模式(一) -- 工厂方法模式(创建型设计模式)
工厂方法模式介绍工厂模式又称工厂方法模式,是一种创建型设计模式,其在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型。这种设计模式也是 Java 开发中最常见的一种模式,它的主要意图是定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。简单说就是为了提供代码结构的扩展性,屏蔽每一个功能类中的具体实现逻辑。让外部可以更加简单的只是知道调用即可,同时,这也是去掉众多ifelse的方式。当然这可能也有一些缺点,比如需要实现的类非常多,如何去维护,怎样减原创 2021-10-15 10:36:22 · 197 阅读 · 0 评论