
设计模式(java语言)
文章平均质量分 62
设计模式、设计工具
w_t_y_y
个人在线笔记~,其他博客:https://www.zhihu.com/people/wtyy666
展开
-
设计模式(24)访问者模式
1、定义:访问者模式(Visitor Pattern),封装一些作用于某种数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。(1)需要对一个对象结构中的对象进行很多不同操作(这些操作彼此没有关联),同时需要避免让这些操作"污染"这些对象的类,可以用访问者模式解决。(2)具体元素对访问者公布细节,也就是说访问者关注了其他类的内部细节,这是迪米特法则所不建议的, 这样造成了具体元素变更比较困难。(1)可以很方便的添加新的访问者,保证了开闭原则,利于维护。原创 2023-11-01 15:15:12 · 84 阅读 · 0 评论 -
设计模式(23)解释器模式
一、介绍:1、定义:2、组成结构:二、demo:1、原创 2023-11-01 10:26:35 · 415 阅读 · 0 评论 -
设计模式(22)享元模式
(4)FlyweightFactory(享元工厂类):享元工厂类用于创建并管理享元对象,它针对抽象享元类编程,将各种类型的具体享元对象存储在一个享元池中,享元池一般设计为一个存储“键值对”的集合(也可以是其他类型的集合),可以结合工厂模式进行设计;(1)内部状态:是对象可共享出来的信息,存储在享元对象内部并且不会随环境改变而改变,如用户的ID、Name,它们可以作为一个对象的动态附加信息,不必直接储存在具体某个对象中,属于可以共享的部分。(2)减少内存之外的其他资源占用 (减少new 关键字的创建次数)原创 2023-10-31 15:29:04 · 206 阅读 · 0 评论 -
设计模式(21)中介者模式
(3)集中控制逻辑:中介者模式将对象间的交互逻辑集中在中介者对象中,使得系统的控制逻辑更加清晰明确。(4)具体同事类(Concrete Colleague):实现了抽象同事类的接口,实现自身的业务逻辑,并通过中介者对象进行与其他同事对象的通信。(2)简化对象间的通信:中介者模式通过引入中介者对象,将对象间复杂的相互通信转变为对象与中介者之间的简单交互,简化了对象间的通信逻辑。(1)降低耦合度:中介者模式将对象之间的交互集中在中介者对象中,减少了对象之间的直接依赖和耦合度,使系统更加灵活、可扩展和易于维护。原创 2023-10-30 16:19:42 · 151 阅读 · 0 评论 -
设计模式(20)职责链模式
将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。在责任链模式中,当一个对象无法处理请求时,它会将请求传递给链中的下一个对象,直到找到能够处理请求的对象为止。(2)具体处理者(ConcreteHandler):实现抽象处理者接口,具体处理请求的逻辑。如果可以处理请求,则处理请求;(1)抽象处理者(Handler):定义了一个处理请求的接口,包含抽象处理方法和一个后继连接。(3)客户类:创建处理链,并向链头的具体处理者对象提交请求,它不关心处理细节和请求的传递过程。原创 2023-10-30 10:32:37 · 127 阅读 · 0 评论 -
设计模式(19)命令模式
1、定义:命令模式(Command Pattern)是一种行为设计模式,它将请求封装为一个对象,从而使你可以使用不同的请求对客户端进行参数化。(2)具体命令类(Concrete Command):实现命令接口,封装了具体的请求和接收者,负责执行请求。(3)接收者类(Receiver):执行实际的操作,命令对象将请求委托给接收者来执行。(4)调用者类(Invoker):调用命令对象来执行请求,并负责命令的管理和控制。(1)命令接口(Command):定义执行命令的方法,可以是抽象类或接口。原创 2023-10-27 15:17:16 · 510 阅读 · 0 评论 -
设计模式(18)桥接模式
桥接(Bridge)模式属于结构型设计模式。通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。简而言之,实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让他们独立变化,减少他们之间的耦合。原创 2023-10-26 10:31:29 · 387 阅读 · 0 评论 -
设计模式(17)单例模式
public class Single { private static Single single=new Single(); private Single(){ } public static Single getInstence(){ return single; }}即将构造私有化,不通过构造去实例化,而通过普通函数去实例化。为了控制被实例化的个数原创 2017-07-25 14:25:57 · 211 阅读 · 1 评论 -
设计模式(16)迭代器模式
一、介绍:1、定义:原创 2023-10-25 15:10:12 · 345 阅读 · 0 评论 -
设计模式(15)组合模式
(1)抽象构件(Component)角色:它的主要作用是为树叶构件和树枝构件声明公共接口,并实现它们的默认行为。(2)树枝构件(Composite)角色 / 中间构件:是组合中的分支节点对象,它有子节点,用于继承和实现抽象构件。(1)高层模块调用简单:组合模式使得客户端代码可以一致地处理单个对象和组合对象,无须关心自己处理的是单个对象,还是组合对象,这简化了客户端代码。(3)树叶构件(Leaf)角色:是组合中的叶节点对象,它没有子节点,用于继承或实现抽象构件。(2)树枝构件(Composite)原创 2023-10-25 09:39:15 · 338 阅读 · 0 评论 -
设计模式(14)备忘录模式
4、组成:备忘录模式的核心是备忘录(Memento)角色,它用于存储对象的内部状态,并提供对状态的访问方法。(1)当需要保存和恢复对象的内部状态,并且希望封装状态的具体实现细节。备忘录模式将对象的状态保存在备忘录对象中,对外部对象隐藏了状态的实现细节,提高了对象的封装性。(2)当需要在不破坏对象封装性的前提下保存和恢复对象的状态,以便进行撤销、回滚或者历史记录管理时。1、定义:是一种行为设计模式,它允许将对象的内部状态保存在一个备忘录对象中,并在需要时恢复对象的状态,而不破坏对象的封装性。原创 2023-10-24 14:35:58 · 274 阅读 · 0 评论 -
设计模式(13)适配器模式
这种模式的核心归结如下:当你想实现一个接口但又不想实现所有接口方法,只想去实现一部分方法时,就用默认的适配器模式,他的方法是在接口和具体实现类中添加一个抽象类,而用抽象类去空实现目标接口的所有方法。适配器模式常用于系统的不兼容性问题。(2)适配器(Adapter):将源接口转换成目标接口的类,它实现了目标接口,并且包含一个对源接口的引用。更好的扩展性:在实现适配器功能的时候,可以扩展自己源的行为(增加方法),从而自然地扩展系统的功能。5、适配器模式有2种:面向类的适配器模式,面向对象的适配器模式。原创 2023-10-24 14:04:30 · 305 阅读 · 0 评论 -
设计模式(12)状态模式
(2)当对象具有大量的状态以及与每个状态相关的行为时,状态模式可以提供一种结构化的方式来管理和组织这些状态和行为。(3)具体状态类(Concrete State):具体状态类实现了抽象状态类的接口,并负责定义该状态下的具体行为。2、组成:状态模式的核心思想是通过将对象的行为包装在不同的状态类中,使得对象可以根据其当前状态来改变行为,而不需要使用大量的条件判断语句。它维护了一个对抽象状态类的引用,用于切换和委托不同的状态处理。(2)抽象状态类(State):抽象状态类定义了一个接口,用于具体状态类的实现。原创 2023-10-24 10:14:28 · 423 阅读 · 0 评论 -
设计模式(11)观察者模式
1、定义:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。原创 2023-08-23 14:09:03 · 1106 阅读 · 0 评论 -
设计模式(10)建造者模式
1、概念:将一个复杂对象的构造与它的表示分离,使得同样的构造过程可以创建不同的表示。建造者模式主要用于创建一些复杂的对象,这些对象内部构建间的顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化;建造者模式的好处就是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。3、使用场景:当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时使用。原创 2023-08-22 17:13:37 · 1334 阅读 · 0 评论 -
设计模式(9)外观模式
三、使用场景:对于复杂难以维护的老系统,可以为新系统开发一个外观 Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作。为子系统中的一组接口定义一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”。1、使用背景:降低访问复杂系统的内部子系统时的复杂度,简化客户端之间的接口。原创 2023-08-22 14:32:51 · 719 阅读 · 0 评论 -
设计模式(8)模板方法模式
定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。原创 2023-08-22 10:38:37 · 768 阅读 · 0 评论 -
设计模式(7)原型模式
该方法是Object的方法,native类型。他的作用就是将对象的在内存的那一块内存数据一字不差地再复制一个。这样实现的方式是浅拷贝。1、数据集对象DataSet,有Clone()方法和Copy()方法,Clone用于复制结构而不复制数据,实现了原型模式的浅复制;Copy不但复制结构也复制数据,实现了原型模式的深复制。(1)浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象;(2)深复制:把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。原创 2023-08-11 15:28:40 · 1088 阅读 · 0 评论 -
设计模式(6)代理模式
2、虚拟代理:通过代理来存放实例化需要很长时间的真实对象。【Subject/抽象角色】定义了RealSubject和Proxy的共用接口,这样就可以在任何使用RealSubject的地方都可以使用Proxy。【Proxy/代理角色】保存一个引用使得代理可以访问实体,并提供一个与Subject的接口相同的方法,这样可以用Proxy替换实体。1、远程代理:为一个对象在不同的地址空间提供局部代表。4、智能指引:指调用真实的对象时,代理处理另外一些事。3、安全代理:用来控制真实对象访问时的权限。原创 2023-08-10 15:30:05 · 1932 阅读 · 0 评论 -
设计模式(5)装饰模式
例如,InputStream 的子类 FilterInputStream,OutputStream 的子类 FilterOutputStream,Reader 的子类 BufferedReader 以及 FilterReader,还有 Writer 的子类 BufferedWriter、FilterWriter 以及 PrintWriter 等,它们都是抽象装饰类。3、装饰模式简化: 装饰模式所包含的 4 个角色不是任何时候都要存在的,在有些应用环境下模式是可以简化的,如以下两种情况。原创 2023-08-08 15:08:26 · 729 阅读 · 0 评论 -
设计模式(4)策略模式
策略模式原创 2022-11-17 16:10:59 · 290 阅读 · 2 评论 -
设计模式(3)抽象工厂模式
工厂模式中,重要的是工厂类,而不是产品类。返回的实例一定是工厂创建的,而不是从其他对象中获取的。抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)。简单工厂 : 用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力);工厂方法 :用来生产同一等级结构中的固定产品。(支持增加任意产品);原创 2023-08-23 14:44:35 · 944 阅读 · 1 评论 -
设计模式(2)工厂方法模式
1、介绍:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。工厂方法模式也即将简单工厂模块的Factory工厂类拆成接口,再定义具体的工厂子类去实现。原创 2023-08-10 15:49:03 · 1052 阅读 · 0 评论 -
设计模式(1)简单工厂模式
举例:现在有一个任务task,有任务类型(TXT_TO_MYSQL、MYSQL_TO_TXT、MONGO_TO_TXT),任务参数,根据不同的任务类型去处理参数并且调用不同的util方法。普通的写法会是:if("TXT_TO_MYSQL".equals(type)){......................return ...;}if("MYSQL_TO_TXT".e...原创 2019-07-10 10:47:29 · 430 阅读 · 1 评论 -
类图表示法
(5)合成关系:合成(Composition,组合)是一种强的“拥有关系”,体现了严格的部分和整体的关系,部分和整体的生命周期一样。在鸟和其翅膀就是合成(组合)关系,因为它们是部分和整体的关系,并且翅膀和鸟的生命周期是相同的。合成关系的连线两端有一个数字“1”和数字“2”,这被称为基数,表明这一端的类可以有几个实例,一个鸟应该有两只翅膀。注意前面的符号,“+”表示 public,“-”表示 private,“#”表示 protected。(3)关联关系:看企鹅和气候的两个类,企鹅是很特别的鸟,会游不会飞。原创 2023-10-25 14:10:32 · 470 阅读 · 0 评论 -
设计模式原则
一、单一职责原则:如果你能想到多于一个的动机去改变一个类,那么这个类就有多于一个的职责,类的职责应该相互分离。原创 2023-08-04 15:31:35 · 103 阅读 · 0 评论 -
设计模式综述
Java类的设计模式原创 2017-07-17 19:50:24 · 506 阅读 · 1 评论