
设计模式
文章平均质量分 94
理想万岁万万岁
毕业于重庆科技学院,从事java后端领域,热爱分享,热爱交友
展开
-
设计模式之观察者模式
观察者模式(Observer Pattern),又称监听器模式(Listener Pattern)或发布-订阅模式(Publish-Subscribe Pattern),属于行为型设计模式。该模式定义了一种一对多的依赖关系,当一个对象状态发生改变或执行某个逻辑时,所有依赖于该动作的对象都会收到通知并作出相应的动作。该模式的目的就是为了使系统中的主线业务与各个与主线业务相关的支线业务之间实现解耦。原创 2023-11-02 22:51:19 · 718 阅读 · 0 评论 -
设计模式之备忘录模式
备忘录模式(Memento Pattern),属于行为型设计模式。目的是用于保存一个对象在某一时刻的状态,以便于在将来某个时刻根据此状态恢复该对象。在我们日常生活中,备忘录的使用十分频繁。比如,有一个事情我们完成了35%的进度,这时有另一件更重要的事情需要处理,那么我们需要对这个已完成35%的事情进行记录(做了哪些事情,做到什么程度等),当那个更重要的事情完成后,就可以根据记录的内容(做了哪些事情,做到什么程度等)继续处理这件事情,而不至于因为忘记处理进度而导致重复或疏漏,这个记录的过程就是备忘。原创 2023-10-30 22:41:05 · 482 阅读 · 0 评论 -
设计模式之中介模式
中介模式(Mediator Pattern),属于行为型设计模式。目的是把系统中对象之间的调用关系从一对多转变成一对一的调用关系,以此来降低多个对象和类之间的通信复杂性。在很多情况下,一个类中对象于对象之间的调用往往很容易形成网状结构,此时倘若一个对象发生改变,那么将会导致其他所有与之关联的对象进行修改,从而导致系统复杂性增加,且难以维护。使用中介模式,可以通过向系统中引入中介类,将这种网状结构改为星型结构。原创 2023-10-26 16:09:03 · 548 阅读 · 0 评论 -
设计模式之迭代器模式
迭代器模式(,属于行为型设计模式,在java和python中十分常见。目的是在不暴露集合内部结构的条件下,顺序访问该集合内部的元素。提供一种顺序访问一个集合中所有元素的方式, 而又无需暴露该对象的内部表示。在需要顺序访问集合元素的场景中,传统方式是通过以下方式对集合元素进行遍历i++) {在该方式中,对元素的获取是通过直接调用集合的get()方法完成的,即对元素的遍历由集合本身负责。而使用迭代器设计模式后,集合本身不负责元素的遍历,而提供一个获取迭代器的方法iterator()原创 2023-10-25 17:11:04 · 968 阅读 · 0 评论 -
设计模式之命令模式
命令模式(Command Pattern),属于行为型设计模式。指的是把方法调用封装成命令,然后执行该命令。目的是为了将类中的各个方法抽出来,形成独立的类,且该类只有一个方法execute(),调用该类的execute()方法就等同于调用原类中对应的方法。BCommondCCommondDCommond,这三个类都实现Command接口中的execute()方法,方法的具体实现与A类中的B、C、D三个方法相同。原创 2023-10-24 16:16:29 · 523 阅读 · 0 评论 -
设计模式之代理模式
代理模式(Proxy Pattern),属于结构型设计模式。主要目的是为了解决给对象方法进行增强,又不修改原对象方法。通过代理类对被代理对象进行代理,可以在被代理对象执行方法前后添加附加功能,丝毫不需要修改原方法中的逻辑。仅从字面意思我们也可以猜到,在代理模式中,从直接访问对象的方式转变为我们通过代理间接访问对象。这就需要我们引入一个代理类,我们只需要访问代理类即可,由代理类访问目标对象。为其他对象提供一种代理以控制对这个对象的访问。原创 2023-10-23 17:34:07 · 769 阅读 · 0 评论 -
设计模式之享元模式
享元模式(FlyWeight),属于结构型设计模式,主要解决实例化大量相同的对象,从而导致可能的内存泄漏的问题。为了解决这个问题,享元模式提出的解决办法是将相同的对象保存在内存中,且仅保存一个对象,因此该对象应该是不可被修改的,当需要获取该对象实例时,直接从内存中读取即可,从而避免了相同对象的重复创建。下面是享元模式的定义:运用共享技术有效地支持大量细粒度的对象。原创 2023-10-20 17:37:51 · 1035 阅读 · 0 评论 -
设计模式之外观模式
外观模式(Facade Pattern),又称为门面模式,属于结构型设计模式。外观模式为一组子系统的逻辑调用提供一个独立的接口调用。在不使用外观模式的情况下,实现一个功能时需要按照一定的顺序对多个方法调用,因此我们需要关注对哪些方法进行调用,以及按照什么样的顺序。而在外观模式中,我们通过调用外观类(Facade)的一个方法就可以实现该功能,该外观类(Facade)内部按照对应的顺序对这些方法进行调用,而具体按照什么样的顺序调用哪些方法我们无需关注,交给外观类(Facade)就可以了。原创 2023-10-19 14:59:11 · 674 阅读 · 0 评论 -
设计模式之装饰器模式
装饰器模式(Decoration Pattern),属于结构型设计模式,用于在不改变现有对象的基础上,对该对象的方法动态地添加新的功能,实现对该对象原有方法的增强。装饰器模式的设计思想是将对象的核心功能和附加功能独立开来。核心功能由现有对象提供,附加功能由装饰器提供。装饰器的实现思路是存在一个抽象的装饰器类,该装饰器类用于对现有的对象进行包装,然后通过该装饰器的具体子类对包装的类的方法进行增强。推而论之,在存在多个装饰器具体子类的情况下,可以动态地。原创 2023-10-18 17:22:51 · 895 阅读 · 0 评论 -
设计模式之组合模式
组合模式(Composite Pattern),属于结构型设计模式。组合模式常用于树形的数据结构多级菜单部门层级关系html文本中的dom树。它的特点是使用户对单个对象和组合对象的使用是相同的。原创 2023-08-29 17:20:51 · 953 阅读 · 0 评论 -
设计模式之桥接模式
桥接模式,属于结构型设计模式。通过提供抽象与实现之间的桥接结构,把抽象化与实现化解耦,使得二者可以独立变化。《Head First 设计模式》:将抽象和实现放在两个不同的类层次中,使它们可以独立地变化。《图解设计模式》:将类的功能层次结构和实现层次结构相分离,使二者能够独立地变化,并在两者之间搭建桥梁,实现桥接。从专业术语对交接模式的解释来看,总是让人似懂非懂,即使懂了,从代码上实现又让人无法捉摸。典型的每个字都认识,连在一起就不懂了。原创 2023-08-29 14:21:47 · 1275 阅读 · 0 评论 -
设计模式之抽象工厂
抽象工厂模式(Abstract Factory Pattern)属于创建型设计模式。用于解决比工厂方法设计模式更加复杂的问题。复杂到哪里了呢?工厂方法设计模式中,指定工厂只能创建对应的单个产品,是一对一的关系。抽象工厂模式中,不仅需要创建产品的工厂,还多了一个创建工厂的工厂(顶级工厂)。当顶级工厂创建一个工厂时,顶级工厂与工厂是一对一的关系(等同于工厂模式),被创建的工厂可以生产多个产品,因此顶级工厂与产品之间是一对多的关系。结婚是一件十分麻烦的事情,需要准备非常非常多的事情,比如婚车婚房婚纱照。原创 2023-08-25 17:40:39 · 1113 阅读 · 0 评论 -
设计模式之工厂模式
工厂模式(Factory Pattern)是最常使用的设计模式之一,属于创建型设计模式。在该设计模式中,我们不再使用new来实例化对象,而是通过工厂对象来获取指定的对象实例,其中对象的实例化过程是在工厂中完成的。换句话说,就是将对象的实例化过程从调用方控制改变成工厂控制。说到这里,我愣了一下,这不就是控制反转(IOC)嘛?spring的IOC容器主要使用的设计模式之一就是工厂模式,它将我们对对象的控制权转移给了。原创 2023-08-24 16:44:45 · 657 阅读 · 0 评论 -
设计模式之创建者模式
建造者模式(Builder Pattern)属于创建型设计模式,很多博客文章的对它的作用解释为用于将复杂对象的创建过程与其细节表示分离。但对于初学者来说,这句话难免有点晦涩难懂,何为复杂对象?何为创建过程,何为细节表示?复杂对象:一个对象中的成员属性出了基本数据类型及其对应的封装类型,还包含有其他类型对象。例如:在对象A中包含对象B的引用,对象B中又包含对象C的引用。创建过程:一个对象的实例化和初始化过程。如new一个对象后再调用其set方法为其初始化。细节表示:在对一个对象初始化时,通过set。原创 2023-08-21 15:37:34 · 837 阅读 · 0 评论 -
设计模式之原型模式
原型模式属于创建型设计模式,用于创建重复的对象,且同时又保证了性能。该设计模式的好处是将对象的创建与调用方分离。其目的就是**根据一个对象(称为原型)创建一个与其完全相同的对象(当然内存地址不同)。**原对象被认为是新对象的原型。原型模式用于创建具有相同属性的重复对象。原型模式的实现就是实现Cloneable接口 + 重写clone()方法实现的。Object类的clone()方法实现由JVM实现,性能较好。但仅能实现浅拷贝。纸上得来终觉浅,绝知此事要躬行。原创 2023-08-18 15:58:27 · 720 阅读 · 0 评论 -
设计模式之单例模式
单例模式,属于创建型设计模式,单指一个,例指实例,就是说在一个程序的运行过程中,应用了单例模式的类始终只有一个实例,且不允许出现多个实例,并在整个程序中提供一个获取该实例的方法。spring中的bean默认就是单例模式,类的实例化由spring完成,我们只需要从框架中获取即可,而不是直接去new一个实例。web应用中的Servlet。我们在应用开发时,线程池也应当设计成单例模式。**何时使用:**如果一个类的实例在整个生命周期中是无状态的,则可以使用单例模式使整个应用程序中只有一个实例。原创 2023-08-17 15:15:19 · 829 阅读 · 0 评论 -
设计模式之适配器模式
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个例子,现在市面上很多手机都是typeC的接口,但我们的U盘都是usb格式的接口,因此这两个接口是不兼容的,如果我们能在手机上使用usb的U盘,那将会方便很多。因此我们需要一个适配器,适配器的输入端插入U盘,输出端以TypeC的格式插到手机上,这样,手机就可以读取U盘中的文件了。原创 2023-04-08 10:00:00 · 510 阅读 · 2 评论 -
设计模式之策略模式
所谓策略模式,指的是做某一件事时有多种选择(即策略),且不同的策略之间相互独立,而且无论使用哪种策略,得到的结果都是相同的。例如你要从上海去重庆旅游,在选择交通工具时你可以选择高铁,也可以选择飞机,也可以自己开车自驾游。你要做的是从上海去重庆,在选择交通工具时面临多种选择,每一种选择就是策略。原创 2023-04-06 13:45:17 · 380 阅读 · 0 评论 -
设计模式之模版方法
模版方法是23种设计模式中的一个,属于行为性设计模式。是对算法行为方式的一类设计。所谓模版方法,就是在一个方法中,定义了一系列其他方法的调用顺序,而其他方法由各个子类实现。因此当调用这个方法时,它只提供了其他方法的调用顺序,其他方法的实现细节由调用方的实际类型决定。简单理解就是定义一个模版,模版内的不同模块该如何实现交给子类完成。打个比方,你是两个孩子(孩子A和孩子B)的爸爸,你给他们提出了一日三餐的规定,先吃早饭,再吃午饭,最后吃晚饭。两个孩子很乖孩子A早饭喝粥,午饭吃饭,晚饭吃屎。原创 2023-04-05 10:00:00 · 460 阅读 · 0 评论 -
设计模式之责任链模式
23大设计模式之责任链模式原创 2022-09-06 23:37:24 · 399 阅读 · 0 评论