JAVA设计模式
文章平均质量分 90
Big Skipper
The Chosen One.
展开
-
一句话总结23种设计模式
一 概述断断续续写了一段时间的设计模式,终于把经典的23种设计模式全写完了。下面对这些设计模式总结一下。二 设计原则设计原则的介绍 : Java 设计模式之设计原则即使我们之前没有专门看过这些原则,但是我们实际开发中或多或少都用到这些原则。实际上,这些原则的目的只有一个:降低对象之间的耦合,增加程序的可复用性、可扩展性、可维护性。优秀的设计模式就是基于这些原则去实现的。三 设计模式的分类设计模式一般分为三类:创建型模式、结构型模式、行为型模式。3.1 创建型模式创建型模式简单来说就是用来创建原创 2021-08-22 22:18:24 · 729 阅读 · 0 评论 -
JAVA设计模式之命令模式
一 概述1.1 定义将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录日志,可以提供命令的撤销和恢复功能。命令模式属于行为型模式我们遇到最常见的命令模式就是关机操作了,我们只需点击一下关机按钮就可以了,至于计算机是如何关机的,我们不需要关心其实现细节1.2 UML 类图角色说明:Command(命令角色):接口或者抽象类,定义要执行的命令ConcreteCommand(具体命令角色):命令角色的具体实现,通常会持有接收者,并调用接收者来处理命令Inv原创 2021-08-18 00:08:02 · 322 阅读 · 0 评论 -
JAVA设计模式之解释器模式
一 概述1.1 定义给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。解释器模式属于行为型模式解释器模式提供了一种解释语言的语法或表达式的方式解释器模式实际开发中很少用到1.2 UML 类图角色说明:AbstractExpression(抽象表达式):定义一个抽象的解释方法,其具体的实现在各个具体的子类解释器中完成TerminalExpression(终结符表达式):实现对文法中与终结符有关的解释操作NonterminalExpress原创 2021-08-18 00:07:34 · 215 阅读 · 0 评论 -
JAVA设计模式之中介者模式
一 概述1.1 定义用一个中介者对象来封装一系列的对象交互。中介者使得各对象不需要显式地相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。中介者模式属于行为型模式中介者模式也称为调解者模式或者调停者模式当程序存在大量的类时,多个对象之间存在着依赖的关系,呈现出网状结构,那么程序的可读性和可维护性就变差了,并且修改一个类需要牵涉到其他类,不符合开闭原因此我们可以引入中介者,将网状结构转化成星型结构,可以降低程序的复杂性,并且可以减少各个对象之间的耦合。1.2 UML 类图原创 2021-08-17 17:19:38 · 162 阅读 · 0 评论 -
JAVA设计模式之访问者模式
一 概述1.1 定义封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。访问者模式属于行为型模式访问者模式是一种将数据结构和数据操作分离的设计模式访问者模式比较复杂,而且实际使用的地方并不多访问者模式适用于数据结构稳定的元素操作上,一旦数据结构易变,则不适用1.2 UML 类图角色说明:Visitor(抽象访问者):接口或者抽象类,为每一个元素(Element)声明一个访问的方法ConcreteVisitor(具体访问者):实现抽原创 2021-08-17 16:57:45 · 244 阅读 · 0 评论 -
JAVA设计模式之备忘录模式
一 概述1.1 定义在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到先前保存的状态。备忘录模式属于行为型模式备忘录模式比较适合用于功能复杂,但是需要维护和纪录历史的地方,或者是需要保存一个或者多个属性的地方;在未来某个时刻需要时,将其还原到原来纪录的状态1.2 UML 类图角色说明:Originator(发起人角色):负责创建一个备忘录(Memoto),能够记录内部状态,以及恢复原来记录的状态。并且能够决定哪些状态是需要备忘的M原创 2021-08-17 15:25:04 · 303 阅读 · 0 评论 -
JAVA设计模式之迭代器模式
一 概述1.1 定义提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。迭代器模式属于行为型模式迭代器(Iterator)模式,又叫做游标(Cursor)模式Java 中的 Map、List 等等容器,都使用到了迭代器模式1.2 UML 类图角色说明:Iterator(迭代器接口):负责定义、访问和遍历元素的接口ConcreteIterator(具体迭代器类):实现迭代器接口Aggregate(容器接口):定义容器的基本功能以及提供创建迭代器的接口Concre原创 2021-08-17 15:13:10 · 223 阅读 · 0 评论 -
JAVA设计模式之模板方法模式
一 概述1.1 定义定义一个操作中的算法框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。模板方法模式属于行为型模式模板方法模式主要是用来定义一套流程下来的固定步骤,而具体的步骤实现则可以是不固定的1.2 UML 类图角色说明:AbstractClass(抽象类):定义了一整套算法框架ConcreteClass(具体实现类):具体实现类,根据需要去实现抽象类中的方法二 实现继续以送快递为例,快递员送快递基本就是一套固定的流程:收到快递原创 2021-08-17 14:52:50 · 285 阅读 · 0 评论 -
JAVA设计模式之状态模式
一 概述1.1 定义当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式属于行为型模式状态模式中的行为是由状态来决定的,即不同状态下的行为也不同状态模式的结构跟策略模式的几乎一样,但其本质是不一样的。策略模式中的行为是彼此独立,能够相互替换的;而状态模式的行为是平行的,不同状态下其行为也是不一样的,具有不可替换性。1.2 UML 类图角色说明:State(抽象状态角色):抽象类或者接口,定义对象的各种状态和行为ConcreteState(具体状态角色):原创 2021-08-17 13:53:43 · 208 阅读 · 0 评论 -
JAVA设计模式之外观模式
一 概述1.1 定义要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。外观模式提供一个高层次的接口,使得子系统更易于使用。外观模式属于结构型模式外观模式也叫门面模式通常我们对 API 进行封装,都会用到外观模式,只是我们可能不知道而已。外观模式通过一个外观类使得整个系统的结构只有一个统一的高层接口,这样能降低用户的使用成本。1.2 UML 类图角色说明:Facade(外观角色):对外的统一入口Complex System(复杂系统):一般由多个子系统构成,负责具体功能的原创 2021-08-17 13:40:31 · 173 阅读 · 0 评论 -
JAVA设计模式之享元模式
一 概述1.1 定义使用共享对象可有效地支持大量的细粒度的对象。享元模式属于结构型模式享元模式是池技术的重要实现方式,它可以减少重复对象的创建,使用缓存来共享对象,从而降低内存的使用细粒度的对象其状态可以分为两种:内部状态和外部状态内部状态:对象可共享出来的信息,存储在享元对象内部并且不会随环境的改变而改变。外部状态:对象依赖的一个标记是随环境改变而改变的,并且不可共享。1.2 UML 类图角色说明:Flyweight(抽象享元角色):接口或抽象类,可以同时定义出对象的外部状态和原创 2021-08-17 11:26:12 · 207 阅读 · 0 评论 -
JAVA设计模式之桥接模式
一 概述1.1 定义将抽象部分与实现部分分离,使它们都可以独立的变化。桥接模式属于结构型模式举个生活中的例子,一条数据线,一头 USB 接口的可以连接电脑、充电宝等等,另一头可以连接不同品牌的手机,通过这条数据线,两头不同的东西就可以连接起来,这就是桥接模式。1.2 UML 类图角色说明:Abstraction(抽象化角色):一般是抽象类,定义该角色的行为,同时保存一个对实现化角色的引用Implementor(实现化角色):接口或者抽象类,定义角色必需的行为和属性ConcreteI原创 2021-08-17 10:56:13 · 236 阅读 · 0 评论 -
JAVA设计模式之组合模式
一 概述1.1 定义将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。组合模式属于结构型模式组合模式有时叫做部分—整体模式,主要是描述部分与整体的关系组合模式实际上就是个树形结构,一棵树的节点如果没有分支,就是叶子节点;如果存在分支,则是树枝节点我们平时遇到的最典型的组合结构就是文件和文件夹了,具体的文件就是叶子节点,而文件夹下还可以存在文件和文件夹,所以文件夹一般是树枝节点1.2 UML 类图角色说明:Component(抽象组件原创 2021-08-17 10:39:22 · 409 阅读 · 0 评论 -
JAVA 设计模式系列
JAVA 设计模式系列Java 设计模式之设计原则创建型模式(6):JAVA设计模式之单例模式JAVA设计模式之建造者模式JAVA设计模式之简单工厂模式JAVA设计模式之工厂方法模式JAVA设计模式之抽象工厂模式JAVA设计模式之原型模式行为型模式(11):JAVA设计模式之策略模式JAVA设计模式之状态模式JAVA设计模式之责任链模式JAVA设计模式之观察者模式JAVA设计模式之模板方法模式JAVA设计模式之迭代器模式JAVA设计模式之备忘录模式JAVA设计模式之访问者模原创 2021-08-16 23:45:38 · 274 阅读 · 0 评论 -
JAVA设计模式之原型模式
一 概述1.1 定义用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。原型模式属于创建型模式一个已存在的对象(即原型),通过复制原型的方式来创建一个内部属性跟原型都一样的新的对象,这就是原型模式原型模式的核心是 clone 方法,通过 clone 方法来实现对象的拷贝1.2 UML 类图角色说明:Prototype(抽象原型类):抽象类或者接口,用来声明 clone 方法ConcretePrototype1、ConcretePrototype2(具体原型类):即要被复制原创 2021-08-16 23:03:45 · 229 阅读 · 1 评论 -
JAVA设计模式之抽象工厂模式
一 概述1.1 定义为创建一组相关或者相互依赖的对象提供一个接口,而无需指定它们的具体类。抽象工厂模式属于创建型模式工厂方法模式每个工厂只能创建一种类型的产品,而抽象工厂模式则能够创建多种类型的产品例如:硬盘工厂只生产硬盘这种产品,而电脑工厂则组合不同的硬盘、内存、CPU 等生产出电脑来1.2 UML 类图角色说明:AbstractProduct(抽象产品类):定义产品的公共接口ConcreteProduct(具体产品类):定义产品的具体对象,实现抽象产品类中的接口Abstrac原创 2021-08-16 18:47:31 · 264 阅读 · 0 评论 -
JAVA设计模式之工厂方法模式
一 概述1.1 定义定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法模式属于创建型模式工厂方法模式主要用来创建复杂的对象,简单对象能够使用 new 来创建就不用工厂方法模式来创建了1.2 UML 类图角色说明:Product(抽象产品类):要创建的复杂对象,定义对象的公共接口ConcreteProduct(具体产品类):实现 Product 接口Factory(抽象工厂类):该方法返回一个 Product 类型的对象ConcreteFactory(具体工厂类):返回原创 2021-08-16 18:30:00 · 820 阅读 · 0 评论 -
JAVA设计模式之策略模式
一 概述1.1 定义定义一系列的算法,把每一个算法封装起来,并且使它们可相互替换。策略模式使得算法可独立于使用它的客户而独立变化。策略模式属于行为型模式策略模式提供了一组算法给客户端调用,使得客户端能够根据不同的条件来选择不同的策略来解决不同的问题如排序算法,可以使用冒泡排序、快速排序等等1.2 UML 类图角色说明:Stragety (抽象策略类):抽象类或接口,提供具体策略类需要实现的接口ConcreteStragetyA、ConcreteStragetyB(具体策略类):具体原创 2021-08-16 17:04:12 · 339 阅读 · 0 评论 -
JAVA设计模式之责任链模式
一 概述1.1 定义一个请求沿着一条“链”传递,直到该“链”上的某个处理者处理它为止。责任链模式属于行为型模式多个对象中,每个对象都持有下一个对象的引用,这就构成了 “链” 这种结构一个请求通过链的头部,一直往下传递到链上的每一个结点,直到有某个结点对这个请求做出处理为止,这就是责任链模式责任链模式一般分为处理者与请求者。具体的处理者分别处理请求者的行为1.2 UML 类图角色说明:Handler(抽象处理者):抽象类或者接口,定义处理请求的方法以及持有下一个 Handler 的引原创 2021-08-16 15:09:01 · 434 阅读 · 0 评论 -
JAVA设计模式之观察者模式
一 概述1.1 定义定义对象间的一种一个对多的依赖关系,当一个对象的状态发送改变时,所有依赖于它的对象都能得到通知并被自动更新。观察者属于行为型模式观察者模式又被称作发布/订阅模式观察者模式主要用来解耦,将被观察者和观察者解耦,让他们之间没有没有依赖或者依赖关系很小1.2 UML 类图角色说明:Subject(抽象主题):又叫抽象被观察者,把所有观察者对象的引用保存到一个集合里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象。ConcreteSub原创 2021-08-16 14:19:13 · 220 阅读 · 0 评论 -
JAVA设计模式之适配器、装饰和代理模式联系和区别
一 概述适配器模式,装饰模式,代理模式,这三种模式都有着一些大同小异的地方,有必要详细说明下三者的区别。设计模式,其实是一种解决方法,JAVA 作为一种面向对象的语言,对于所有的设计模式在实现上,总是少不了对接口的实现,对抽象类的继承,有时候似乎是为了去实现接口而去写接口,所以在这三种模式的说明代码中,我们都定义了接口这些东西,所以才有了现在的混淆。二 三种设计模式的概念适配器模式:一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。适配器的特原创 2021-08-16 00:18:30 · 398 阅读 · 0 评论 -
JAVA设计模式之适配器模式
一 什么是适配器模式?小王正在和美女聊天,突然接到领导电话,要去会议室投影汇报项目情况,只能暂时离开美女去了会议室,到了会议室,发现投影仪的接口和自己电脑中的接口不匹配。因此小王慌忙去找人借了个转换器,把投影仪的接口转成了自己电脑能用的接口,现在终于可以投影了。这个在设计模式中就是适配器模式。适配器模式(Adapter Pattern):将一个类的接口变换成客户端所期待的另一个接口,从而使原本因为接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式的通用类图如下:其中的几个角色解释如下:原创 2021-08-14 17:32:36 · 222 阅读 · 0 评论 -
Java 设计模式之设计原则
一 概述1.1 设计模式的目的编写软件过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战,设计模式是为了让程序(软件),具有更好的:代码重用性 (即:相同功能的代码,不用多次编写)可读性 (即:编程规范性, 便于其他程序员的阅读和理解)可扩展性 (即:当需要增加新的功能时,非常的方便,称为可维护)可靠性 (即:当我们增加新的功能后,对原来的功能没有影响)使程序呈现高内聚,低耦合的特性1.2 设计模式的七大原则设计模式原则,其实就是程序员在编程时,原创 2021-08-13 00:23:04 · 282 阅读 · 0 评论 -
JAVA设计模式之建造者模式
一 概述定义:建造者模式(Builder Pattern)是将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。使用场景:这个就非常重要了,因为如果你学了个东西,都不知道用来解决什么问题,你说有什么用?理解使用场景的的重要性要远高于你是不是会实现这个模式,因为只要你知道什么问题可以使用 builder 模式来解决,那你即使不会写,也可以在调查相关资料后完成。 我不想说一些大而正确的术语来把你搞蒙,我们只针对具体的问题,至于延展性的思考,随着你知识的增长,逐渐会明白的。当一个类的原创 2021-01-13 18:35:08 · 219 阅读 · 0 评论 -
JAVA设计模式之单例模式
一 概述单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例。介绍意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。主原创 2021-01-12 18:37:48 · 191 阅读 · 0 评论 -
JAVA设计模式之简单工厂模式
一 概述工厂模式工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。介绍意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。主要解决:主要解决接口选择的问题。何时使用:我们明确地计划不同条件下创建不同实例时。如何解决:让其子类实现工厂接口,返回的也原创 2021-01-11 18:51:18 · 163 阅读 · 0 评论 -
JAVA设计模式之代理模式
一 概述代理模式其实很常见,比如买火车票这件小事:黄牛相当于是我们本人的的代理,我们可以通过黄牛买票。通过黄牛买票,我们可以避免与火车站的直接交互,可以省很多事,并且还能享受到黄牛更好的服务(如果钱给够的话)。在软件开发中,代理也具有类似的作用,并且一般可以分为静态代理和动态代理两种,上述的这个黄牛买票的例子就是静态代理。那么,静态代理与动态代理的区别是什么呢?所谓静态代理,其实质是自己手写(或者用工具生成)代理类,也就是在程序运行前就已经存在的编译好的代理类。但是,如果我们需要很多的代理,每一个都这么原创 2021-01-10 16:44:02 · 292 阅读 · 0 评论