![](https://img-blog.csdnimg.cn/85924b052d9641d49ad1f4fe6b97a043.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
《JAVA设计模式系列》
文章平均质量分 69
设计模式相关
欲无缘
Java后端开发 陆续分享后端分布式、中间件、 服务器运维、云原生、前端、移动开发、大数据等相关知识。
展开
-
《JAVA设计模式系列》责任链模式
这种模式给予请求的类型,对请求的发送者和接收者进行解耦。:实现抽象处理者的处理方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该请求转给它的后继者。通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任。:创建处理链,并向链头的具体处理者对象提交请求,它不关心处理细节和请求的传递过程。有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时刻自动确定。在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。原创 2022-09-17 16:08:13 · 413 阅读 · 0 评论 -
《JAVA设计模式系列》命令模式
创建具体的命令对象,并且设置命令对象的接收者。注意这个不是我们常规意义上的客户端,而是在组装命令对象和接收者,或许,把这个Client称为装配者会更好理解,因为真正使用命令的客户端是从Invoker来触发执行。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。要求命令对象执行请求,通常会持有命令对象,可以持有很多的命令对象。这个是客户端真正触发命令并要求命令执行相应操作的地方,也就是说相当于使用命令对象的入口。通常会持有接收者,并调用接收者的功能来完成命令要执行的操作。原创 2022-09-17 11:22:10 · 178 阅读 · 0 评论 -
《JAVA设计模式系列》解释器模式
解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,实现了一个表达式接口,该接口解释一个特定的上下文。:非终结符表达式也是抽象表达式的子类实现了文法中非终结符的解释操作,由于在非终结符表达式中可以包含终结符表达式。:终结符表达式是抽象表达式的子类,它实现了与文法中的终结符相关的解释操作,在句子中的每一个终结符都是该类的一个实例。:再抽象表达式种声明了抽象的解释操作,它是所有终结符表达式和非总结符表达式的公共父类。可以将一个需要解释执行的语言中的句子表示为一个抽象语法树。原创 2022-09-17 10:32:58 · 366 阅读 · 0 评论 -
《JAVA设计模式系列》备忘录模式
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。备忘录角色:负责存储发起人对象的内部状态,在进行恢复时提供给发起人需要的状态。发起人角色:记录当前时刻的内部状态,负责创建和恢复备忘录数据。需要保存/恢复数据的相关状态场景。管理者角色:负责保存备忘录对象。提供一个可回滚的操作。原创 2022-09-17 09:14:23 · 325 阅读 · 0 评论 -
《JAVA设计模式系列》模板模式
在抽象类中定义了一系列基本操作(Primitive Operations),这些基本操作可以是具体的,也可以是抽象的,每一个基本操作对应算法的一个步骤,在其子类中可以重定义或实现这些步骤。同时在抽象类中实现了一个模板方法(Template Method),用于定义一个算法的框架,模板方法不仅可以调用在抽象类中实现的基本方法,也可以调用在抽象类的子类中实现的基本方法,还可以调用其他对象中的方法。原创 2022-09-16 16:48:24 · 317 阅读 · 0 评论 -
《JAVA设计模式系列》访问者模式
它以一个访问者(Visitor)作为参数。原创 2022-09-16 15:56:41 · 335 阅读 · 0 评论 -
《JAVA设计模式系列》观察者模式
观察者模式又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。在应用观察者模式时需要考虑一下开发小路问题,程序中包括一个被观察者和多个被观察者,开发和调试比较复杂,而且Java中的消息的通知默认是顺序执行的,一个观察者的卡顿会影响整体的执行效率。,抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。原创 2022-09-03 11:44:08 · 156 阅读 · 0 评论 -
《JAVA设计模式系列》中介者模式
中介者模式用一个中介对象来封装一系列对象的交互,从而把一批原来可能是交互关系复杂的对象转换成一组松散耦合的中间对象,以有利于维护和修改。当对象之间的交互操作很多且每个对象的行为操作都依赖彼此时,为防止在修改一个对象的行为时,同时涉及很多其他对象的行为,可使用中介者模式。: 定义同事类的接口,保存中介者对象,提供同事对象交互的抽象方法,实现所有相互影响的同事类的公共功能。: 是抽象同事类的实现者,当需要与其他同事对象交互时,由中介者对象负责后续的交互。降低复杂度:将多对多依赖转化成了一对多,降低了类间耦合。原创 2022-09-03 11:04:58 · 418 阅读 · 0 评论 -
《JAVA设计模式系列》迭代器模式
迭代器模式提供了一种方法顺序访问一个聚合对象(理解为集合对象)中各个元素,而又无需暴露该对象的内部表示,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。具体迭代器(Concretelterator)角色:实现抽象迭代器接口中所定义的方法,完成对聚合对象的遍历,记录遍历的当前位置。抽象迭代器(Iterator)角色:定义访问和遍历聚合元素的接口,通常包含 hasNext()、next() 等方法。分离了集合对象的遍历行为, 抽象出了迭代器负责集合对象的遍历。原创 2022-09-02 15:18:49 · 110 阅读 · 0 评论 -
《JAVA设计模式系列》状态模式
状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。:也称为上下文,它定义了客户端需要的接口,内部维护一个当前状态,并负责具体状态的切换。允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类(百度百科)。:定义一个接口,用以封装环境对象中的特定状态所对应的行为,可以有一个或多个行为。:实现抽象状态所对应的行为,并且在需要的情况下进行状态切换。对象内部状态改变的时候,其行为也随之改变。原创 2022-09-02 14:12:58 · 263 阅读 · 0 评论 -
《JAVA设计模式系列》策略模式
定义一系列算法,封装每个算法,并使他们可以互换,不同的策略可以让算法独立于使用它们的客户而变化。原创 2022-09-02 10:33:43 · 265 阅读 · 0 评论 -
《JAVA设计模式系列》享元模式
它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。可以极大减少内存中对象的数量,使得相同或相似对象在内存中只保存一份,从而可以节约系统资源,提高系统性能。享元模式的外部状态相对独立,而且不会影响其内部状态,从而使得享元对象可以在不同的环境中被共享。为了使对象可以共享,享元模式需要将享元对象的部分状态外部化,而读取外部状态将使得运行时间变长。FlyWeight:抽象的享元角色,产品的抽象类,定义了对象的外部状态和内部状态的接口或实现。...........原创 2022-08-31 17:30:48 · 366 阅读 · 0 评论 -
《JAVA设计模式系列》外观模式
外观模式又叫作门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。子系统(Sub System)角色:实现系统的部分功能,客户可以通过外观角色访问它。客户(Client)角色:通过一个外观角色访问各个子系统的功能。外观(Facade)角色:为多个子系统对外提供一个共同的接口。外观(Facade)模式包含以下主要角色。...原创 2022-08-31 14:49:47 · 131 阅读 · 0 评论 -
《JAVA设计模式系列》装饰者模式
当然也可以改变Component接口,增加新的公开的行为,实现“半透明”的装饰者模式。装饰者模式原封不动的使用原接口,系统对装饰的对象也通过原接口来完成使用。装饰者模式原封不动的使用原接口,系统对装饰的对象也通过原接口来完成使用。关于其包裹的对象:适配器是知道被适配者的详细情况的(就是那个类或那个接口)。关于其包裹的对象:适配器是知道被适配者的详细情况的(就是那个类或那个接口)。装饰(Decorator)角色:持有一个构件(Component)对象的实例,并实现一个与抽象构件接口一致的接口。......原创 2022-08-31 10:40:11 · 383 阅读 · 0 评论 -
《JAVA设计模式系列》组合模式
抽象构件(Component)角色:它的主要作用是为树叶构件和树枝构件声明公共接口,并实现它们的默认行为。(总的抽象类或接口,定义一些通用的方法,比如新增、删除)。树枝构件(Composite)角色 / 中间构件:是组合中的分支节点对象,它有子节点,用于继承和实现抽象构件。高层模块调用简单:组合模式使得客户端代码可以一致地处理单个对象和组合对象,无须关心自己处理的是单个对象,还是组合对象,这简化了客户端代码。树叶构件(Leaf)角色:是组合中的叶节点对象,它没有子节点,用于继承或实现抽象构件。......原创 2022-08-30 17:28:57 · 1640 阅读 · 0 评论 -
《JAVA设计模式系列》桥接模式
定义抽象的接口,包含一个对实现化角色的引用,依赖于完成底层实际工作的实现对象。原创 2022-08-30 11:40:18 · 135 阅读 · 0 评论 -
《JAVA设计模式系列》浅谈适配器模式
根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器和类适配器两种,在对象适配器模式中,适配器与适配者之间是关联关系;在类适配器模式中,适配器与适配者之间是继承(或实现)关系。将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。在适配器模式中,我们通过增加一个新的适配器类来解决接口不兼容的问题,使得原本没有任何关系的类可以协同工作。......原创 2022-08-29 15:49:14 · 149 阅读 · 0 评论 -
《JAVA设计模式系列》吃透代理模式就看这一篇
由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。ProxySubject(代理对象) 代理类型 同样实现这个接口(助教大白: 上课前帮老师收手机上课后帮老师看自习)RealSubject(真实对象)目标类型实现这个接口 但只需要关注核心业务(周老师 : 只需要使劲上课)Subject(共同接口)为要被代理的目标类型设计一个Teacher接口。为要被代理的目标类型设计一个接口。代理类型 同样实现这个接口。....原创 2022-08-26 17:10:11 · 198 阅读 · 0 评论 -
《JAVA设计模式系列》浅谈建造者模式
指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。Director(导演类):确定构建我们的类对象具体有哪些模块属性,在实际应用中可以不需要这个角色,直接通过client处理。Builder(抽象建造者类):为我们需要生成的类对象,构建不同的模块属性,即:公开构建产品类的属性,隐藏产品类的其他功能。各个具体的建造者相互独立,有利于系统的扩展,符合开闭原则。...原创 2022-08-25 15:22:21 · 235 阅读 · 0 评论 -
《JAVA设计模式系列》浅谈原型模式
如果通过重写 clone() 方法去实现深克隆十分麻烦,需要将Dog类也实现clong()方法并在Student类的clone()中调用 Dog类的clong()因此引出了另外一种方式:序列化实现深克隆。在Java语言里深复制一个对象,常常可以先使对象实现 Serializable 接口,然后把对象(实际上只是对象的一个拷贝)写到一个流里,再从流里读出来,便可以重建对象。深克隆 复制的变量和原变量的值相同,复制的引用将指向被复制的新对象。浅克隆 复制的变量和原变量的值相同,复制的引用仍指向原有的对象。...原创 2022-08-24 13:29:43 · 128 阅读 · 0 评论 -
《JAVA设计模式系列》浅谈工厂模式
在基类中定义创建对象的一个接口,让子类决定实例化哪个类。工厂方法让一个类的实例化延迟到子类中进行。除了解耦合,把对象的创建和使用的过程分开。工厂模式批量生产对象,还能有效降低代码重复,在业务逻辑发生变化时降低维护成本。在开源框架中的使用很多,比如 Spring 框架中通过 getBean 方法获取 Bean。...原创 2022-08-23 09:39:59 · 130 阅读 · 0 评论 -
《JAVA设计模式系列》浅谈单例模式
创建对象的过程可能发生重排序,在未给初始化对象赋初值的情况下,就为设置实例对象指向刚分配的内存地址。保证一个类仅有一个实例,并提供一个访问它的全局访问点。双重锁结构实现,先判断实例对象是否存在,如果不存在不再需要加锁,大大提高了效率。构造函数必须为 private ,确保单例不会在系统中的其他代码内被实例化。synchronized 关键字实现,加同步锁后再新建对象,保证线程安全。更简洁,自动支持序列化机制,防止多次实例化。在第一次被使用时,创建单例对象。在类装载时,立即创建单例对象。......原创 2022-08-22 17:58:49 · 157 阅读 · 0 评论