![](https://img-blog.csdnimg.cn/73bf63c85af4418db589104cd9cc6748.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
设计模式
文章平均质量分 61
常用模式
https://refactoringguru.cn/design-patterns/catalog
https://blog.csdn.net/weixin_41741359/article/details/100023144
马了个山东
很懒
展开
-
设计模式-21【状态模式--State】
在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。在状态模式中,允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。通常命令模式的接口中只有一个方法。而状态模式的接口中有一个或者多个方法。1.结构清晰,状态模式将与特定状态相关的行为局部化到一个状态中,并且将不同状态的行为分割开来,满足“单一职责原则”。2.将状态转换显示化,减少对象间的相互依赖。将不同的状态引入独立的对象中会使得状态转换变得更加明确,且减少对象间的相互依赖。原创 2022-12-24 15:50:33 · 92 阅读 · 1 评论 -
设计模式-20【模板模式--Template】
在模板模式(Template Pattern)中,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这种类型的设计模式属于行为型模式。一些方法通用,却在每一个子类都重新写了这一方法。,在抽象类实现,其他步骤在子类实现。1、封装不变部分,扩展可变部分。2、提取公共代码,便于维护。3、行为由父类控制,子类实现。每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。转载 2022-12-24 14:35:28 · 66 阅读 · 0 评论 -
设计模式-19【备忘录模式--Memento】
所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。这样做的目的就是为了允许用户取消不确定或者错误的操作,能够恢复到他原先的状态,使得他有"后悔药"可吃。通过一个备忘录类专门存储对象状态。客户不与备忘录类耦合,与备忘录管理类耦合。1、给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。2、实现了信息的封装,使得用户不需要关心状态的保存细节。消耗资源。转载 2022-12-24 13:54:24 · 79 阅读 · 0 评论 -
设计模式-18【原型模式--Prototype】
原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。1、当一个系统应该独立于它的产品创建,构成和表示时。一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。转载 2022-12-22 10:38:48 · 86 阅读 · 0 评论 -
设计模式-17【命令模式--Command】
命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。通过调用者调用接受者执行命令,顺序:调用者→命令→接受者。转载 2022-12-21 14:40:35 · 57 阅读 · 0 评论 -
设计模式-16【桥接模式--Bridge】
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。把这种多角度分类分离出来,让它们独立变化,抽象类依赖实现类。1、抽象和实现的分离。2、优秀的扩展能力。3、实现细节对客户透明。桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。转载 2022-12-21 13:08:56 · 57 阅读 · 0 评论 -
设计模式-15【适配器模式--Adapter】
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读1、系统需要使用现有的类,而此类的接口不符合系统的需要。2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。转载 2022-12-21 10:25:50 · 83 阅读 · 0 评论 -
设计模式-14【建造者模式--Builder】
建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。建造者:创建和提供实例,导演:管理建造出来的实例的依赖关系。1、建造者独立,易扩展。2、便于控制细节风险。1、产品必须有共同点,范围有限制。2、如内部变化复杂,会有很多的建造类。原创 2022-12-20 16:07:38 · 59 阅读 · 0 评论 -
设计模式-13【责任链模式--Chain of Responsibility】
顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。转载 2022-12-20 15:05:29 · 45 阅读 · 0 评论 -
设计模式-12【访问者模式--Visitor】
在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。结构固定何时使用:稳定的数据结构和易变的操作耦合时,而需要避免让这些操作"污染"这些对象的类,使用访问者模式将这些封装到类中。关键代码:在被访问的类里面加一个对外提供接待访问者的接口。定义接口:hasNext, next。优点:1、符合单一职责原则。 2、优秀的扩展性。 3、灵活性。缺点:1、具体元素对访问者公布细节,违反原创 2022-12-20 14:20:38 · 61 阅读 · 0 评论 -
设计模式-11【迭代器模式--Iterator】
迭代器模式(Iterator Pattern)是一种行为设计模式,让你能在不暴露集合底层表现形式(列表、栈和树等)的情况下遍历集合中所有的元素。所有迭代器必须实现相同的接口。这样一来,只要有合适的迭代器,客户端代码就能兼容任何类型的集合或遍历算法。如果你需要采用特殊方式来遍历集合,只需创建一个新的迭代器类即可,无需对集合或客户端进行修改。原创 2022-12-14 13:57:06 · 57 阅读 · 0 评论 -
设计模式-10【代理模式--Proxy】
在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。为其他对象提供一种代理以控制对这个对象的访问。1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。1、和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂。转载 2022-12-13 13:48:33 · 50 阅读 · 0 评论 -
设计模式-09【享元模式--Flyweight】
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。1、系统中有大量对象。2、这些对象消耗大量内存。3、这些对象的状态大部分可以外部化。4、这些对象可以按照内蕴状态分为很多组,当把外蕴对象从对象中剔除出来时,每一组对象都可以用一个对象来代替。5、系统不依赖于这些对象身份,这些对象是不可分辨的。用唯一标识码判断,如果在内存中有,则返回这个唯一标识码所标识的对象。用 HashMap 存储这些对象。原创 2022-10-26 10:24:27 · 91 阅读 · 0 评论 -
设计模式-08【组合模式--Composite】
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。您希望用户忽略组合对象与单个对象的不同,所有节点拥有一致的结构,用户将统一地使用组合结构中的所有对象。树枝和叶子实现统一接口,树枝内部组合该接口,并且含有内部属性 List,里面放 Component。1、高层模块调用简单。2、节点自由增加。在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。原创 2022-10-25 14:57:34 · 85 阅读 · 0 评论 -
设计模式-07【观察者模式--Observer】
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。就好像这些观察者对象在时刻注视着目标对象(被观察)。无论何时该目标对象的状态发生变化,这些观察者对象都能够马上知道,并根据目标对象的新状态执行相应的任务。一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。1、当观察者对象很多时,通知的发布会花费很多时间,影响程序的效率。1、观察者和被观察者是抽象耦合的。3、符合“开闭原则”的要求。转载 2022-10-25 13:39:21 · 76 阅读 · 0 评论 -
设计模式-06【装饰器模式--Decorator】
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法完整性的前提下,提供了额外的功能。一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。在不想增加很多子类的情况下扩展类。将具体功能职责划分,同时继承装饰者模式。转载 2022-10-24 15:51:04 · 56 阅读 · 0 评论 -
设计模式-05【外观模式--Facade】
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。实现核心主要是——由外观类去保存各个子系统的引用,实现由一个统一的外观类去包装多个子系统类,然而客户端只需要引用这个外观类,然后由外观类来调用各个子系统中的方法。然而这样的实现方式非常类似适配器模式,然而外观模式与适配器模式不同的是:适配器模式是将一个对象包装起来以改变其接口,而外观是将一群对象 ”包装“起来以简化其接口。原创 2022-10-22 15:32:39 · 109 阅读 · 0 评论 -
设计模式-04【中介者模式--Mediator】
中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式,著名应用消息中间件。不应当在职责混乱的时候使用。多个类相互耦合,形成了网状结构。对象 Colleague 之间的通信封装到一个类中单独处理,将上述网状结构分离为星型结构。1、降低了类的复杂度,将一对多转化成了一对一。2、各个类之间的解耦。原创 2022-10-22 15:00:25 · 156 阅读 · 0 评论 -
设计模式-03【工厂模式--Factory】
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。我们明确地计划不同条件下创建不同实例时。创建过程在其子类执行。1、一个调用者想创建一个对象,只要知道其名称就可以了。原创 2022-10-22 13:37:53 · 115 阅读 · 0 评论 -
设计模式-02【策略模式--Strategy】
在策略模式(Strategy Pattern)中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。(将执行不同行为封装成类)如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题。一个系统有许多许多类,而区分它们的只是他们直接的行为。将这些算法封装成一个一个的类,任意地替换,实现同一个接口。1、算法可以自由切换。2、避免使用多重条件判断。3、扩展性良好。1、策略类会增多。原创 2022-10-20 14:23:40 · 100 阅读 · 0 评论 -
设计模式-01【单例模式--Singleton】
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。是一种创建型设计模式, 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。当您想控制实例数目,节省系统资源的时候。构造函数是私有的。在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。避免对资源的多重占用(比如写文件操作)。没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。原创 2022-10-20 10:57:09 · 104 阅读 · 0 评论