
设计模式
文章平均质量分 56
设计模式
hygge999
这个作者很懒,什么都没留下…
展开
-
23种设计模式模式介绍及目录
目录一、什么是设计模式二、设计模式的类型1、创建型模式2、结构型模式3、行为型模式三、设计模式之间的关系四、设计模式的六种原则1、开闭原则(Open Close Principle)2、里氏代换原则(Liskov Substitution Principle)3、依赖倒转原则(Dependence Inversion Principle)4、接口隔离原则(Interface Segregation Principle)5、迪米特法则,又称最少知道原则(Demeter Principle)6、合成复用原则(C原创 2022-04-29 15:54:09 · 205 阅读 · 0 评论 -
Visitor 访问者模式
定义在访问者模式中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。如果学过数据结构就很容易理解访问者,遍历就是访问的一种形式,读取到想要查看的内容然后对其进行处理就叫做访问。优缺点优点:符合单一职责原则。优秀的扩展性。灵活性。缺点:具体元素对访问者公布细节,违反了迪米特原则。具体元素变更比较困难。违反了依赖倒置原则,依赖了具体类,没有依赖抽象原创 2022-04-29 15:31:38 · 249 阅读 · 0 评论 -
Chain of Responsibility 责任链模式
定义责任链模式为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。优缺点优点:降低耦合度。它将请求的发送者和接收者解耦。简化了对象。使得对象不需要知道链的结构。增强给对象指派职责的灵活性。通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任。增加新的请求处理类很方便。缺点:不能保证请求一定被接收。系统性原创 2022-04-29 15:07:42 · 184 阅读 · 0 评论 -
State 状态模式
定义在状态模式中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。优缺点优点:封装了转换规则。枚举可能的状态,在枚举状态之前需要确定状态种类。将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数。原创 2022-04-28 17:55:56 · 135 阅读 · 0 评论 -
Interpreter 解释器模式
定义解释器模式提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。无论高级语言的程序是怎么样编写的,编译器的代码是不用修改的,而解释器模式就是想做一个建立在Java和我们自定义语言之间的编译器。优缺点优点:可扩展性比较好,灵活。增加了新的解释表达式的方式。易于实现简单文法。缺点:可利用场景比较少。对于复杂的文法比较难维护。解释器模式会引起类膨胀。解释器模式采用递归调用方原创 2022-04-28 17:42:51 · 410 阅读 · 0 评论 -
Memento 备忘录模式
定义备忘录模式保存一个对象的某个状态,以便在适当的时候恢复对象。优缺点优点:给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。实现了信息的封装,使得用户不需要关心状态的保存细节。缺点: 消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。实现Memento/** * Memento */public class Memento { private String state;原创 2022-04-27 17:45:37 · 316 阅读 · 0 评论 -
Observer 观察者模式
定义观察者模式主要使用于对象间存在一对多关系时。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。优缺点优点:观察者和被观察者是抽象耦合的。建立一套触发机制 。缺点: 如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目原创 2022-04-27 17:25:54 · 257 阅读 · 0 评论 -
Iterator 迭代器模式
定义迭代器模式是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。有人可能非常的奇怪,因为我们完全可以使用一个for循环来完成这样的操作,又何必大费周章的来一个迭代器来遍历呢? 因为for循环耦合度太高了,迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。优缺点优点:它支持以不同的方式遍历一个聚合对象。迭代器简化了聚合类。在同一原创 2022-04-27 16:43:18 · 562 阅读 · 0 评论 -
Command 命令模式
定义命令模式是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。命令模式使请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活,实现解耦。优缺点优点:降低了系统耦合度。可拓展性强,新的命令可以很容易添加到系统中去。缺点:使用命令模式可能会导致某些系统有过多的具体命令类。组成received:接收者对象。Command:命令对象。invo原创 2022-04-27 16:13:45 · 1092 阅读 · 0 评论 -
Template 模板方法
定义在模板模式中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。简单说,就是定义一个操作的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构就可以重新定义该算法的某些步骤。优缺点优点:封装不变部分,扩展可变部分。提取公共代码,便于维护。行为由父类控制,子类实现。缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大 。实现模板方法可以做原创 2022-04-27 15:35:19 · 481 阅读 · 0 评论 -
Flyweight 享元模式
定义享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。我们Java中的String常量池、数据库连接池、缓冲池等池技术都是享元模式的应用,所以说享元模式是池技术的重要实现方式。优缺点优点:大大减少对象的创建,降低系统的内存,使效率提高。缺点:提高了系统的复杂度,需要分离出外部状态和内部状态,而且外部状态不应该随着内部状态的变化而变化,否则会造成系统的混乱。结构抽象享元角色: 产品原创 2022-04-26 18:02:00 · 752 阅读 · 0 评论 -
Composite 组合模式
定义组合模式又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。优缺点优点:高层模块调用简单。节点自由增加。缺点:使得设计更加复杂,客户端需要花更多时间理清类之间的层次关系。结构抽象构件(Component):定义了访问及管理它的子构件的方法,如增加子构件、删除子构件、获取子构件等 。容器构件(Composite):抽象构件的具体实现类。原创 2022-04-26 17:32:32 · 377 阅读 · 0 评论 -
Adapter 适配器模式
定义适配器模式是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。我们给手机充电时,电源线头头就叫电源适配器,作用就是把220V电压转换成手机充电时使用的电压,所以适配器很好理解。优缺点优点:可以让任何两个没有关联的类一起运行。提高了类的复用。增加了类的透明度。灵活性好缺点:过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被原创 2022-04-25 17:51:36 · 482 阅读 · 1 评论 -
Bridge 桥接模式
定义桥接模式是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。桥接模式基于类的最小设计原则,通过使用封装、聚合、继承等行为让不同的类承担不同的职责。优缺点优点:抽象和现实的分离优秀的拓展性实现细节对客户透明缺点:桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求原创 2022-04-25 16:41:49 · 600 阅读 · 0 评论 -
Proxy 代理模式
定义代理模式中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。优缺点优点:被代理类可以更加专注于主要功能的实现,在一定程度上降低了系统的耦合度。代理类可以提供额外的功能 。缺点:实现代理模式需要额外的工作,有些代理模式的实现非常复杂 。使用场景在访问对象时附加一些操作。控制对原始对象的访问,比如过滤器。实现分为静态代理和动态代理。静态代理在使用静态代理时,需要定义接口或者父类,被代理对象与代原创 2022-04-24 17:46:03 · 518 阅读 · 0 评论 -
Prototype 原型模式
定义原型模式是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。原型模式的实现主要是利用sun公司提供的克隆机制来实现的,在Object这个类中有一个clone方法,这个方法是用protected原创 2022-04-24 16:49:35 · 886 阅读 · 0 评论 -
Builder 建造者模式
定义建造者模式使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。组成抽象建造者(Builder):可以是接口或者抽象类。在该接口中一般声明两类方法,一类方法是buildPatX(),他们用于创建复杂对象的各个部件;另一类方法是getResult(),它们用于返回复杂对象。具体建造者(ConcreteBuilder)指挥者(Dire原创 2022-04-18 18:17:40 · 490 阅读 · 0 评论 -
Decorator 装饰器模式
定义Decorator装饰器会动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。组成抽象构件(Component):核心,是一个接口或抽象类。具体构件(ConcreteComponent):Component的具体实现,需要被装饰的构建。装饰者(Decorator):继承或者实现Component,在它的属性里面有一个变量指向Component抽象构件。具体装饰者(ConcreteDecorator):可以把具体构件装饰成新的东西。优缺点优点:装饰类和被装原创 2022-04-18 01:17:42 · 229 阅读 · 0 评论 -
Mediator 中介模式
定义仲裁者模式又称为调停者模式或中介者模式,主要是仲裁和中介的作用,帮助其它类之间进行通信,降低多个对象和类之间的通信复杂性。在仲裁者模式之中,我们要明确两个概念,那就是仲裁者(Mediator)和组员(Colleague),不管组员有什么事情,都会向仲裁者汇报,仲裁者会根据全局的实际情况向其他Colleague作出指示,共同完成一定的逻辑功能。组成仲裁者接口具体的仲裁者组员抽象类具体的组员示例我们以房屋出租为例,房东通过中介将房子租给租客,直接从中介处拿到租金;租客通过中介找到房东进原创 2022-04-16 23:59:48 · 624 阅读 · 1 评论 -
Facade外观模式
定义外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用,子系统并不知道门面的存在,并且子系统也完全不相关,都是单独的存在。我们都知道类与类之间的耦合越低,那么可复用性就越好,如果两个类不必彼此通信,那么就不要让这两个类发生直接的相互关系,如果需要调用里面的方法,可以通过第三者来转发调用。外观模式非常好的诠释了这段话。实现门面类public class Facade { //被委托的对象 SubSystem原创 2022-04-16 21:35:30 · 265 阅读 · 0 评论 -
FactoryMethod工厂方法AbstractFactory抽象工厂
目录定义工厂模式分类不使用设计模式简单工厂模式工厂方法模式抽象工厂模式定义工厂模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个,也就是说工厂方法模式让实例化推迟到子类。工厂模式在创建对象时,不会对客户端暴露对象的创建逻辑,而是通过使用共同的接口来创建对象,非常符合“开闭原则”。简单理解:任何可以产生对象的方法或类,都可以称之为工厂。工厂模式分类简单工厂模式工厂方法模式抽象工厂模式他们分别能解决的问题:由一个工厂来定制任意的实体有多个工厂来定制实体,每个工厂都能定制自原创 2022-04-16 17:02:49 · 534 阅读 · 0 评论 -
Strategy策略模式
作用策略模式其实很简单,就是针对不同的场景,做出不同的处理策略。将一系列行为封装起来,被封装起来的行为具有独立性外部不可改变其特性。遵循了开闭原则,不需要改动旧代码,更方便维护。使用方式为了方便大家真正体会策略模式的好处,这里给出一系列的变换过程,方便大家对比。实体类:@Data@AllArgsConstructor@NoArgsConstructorpublic static class Apple { private String color; private int原创 2022-04-16 02:13:57 · 632 阅读 · 1 评论 -
Singleton单例模式
目录概述代码实现1、饿汉式2、懒汉式3、使用synchronized的懒加载4、双重检测机制5、静态内部类6、枚举概述单例模式(Singleton Pattern)可以保证系统内存中,使用单例模式的类只有一个对象实例。代码实现具体实现一般为:构造方法设为私有,只能通过某个方法得到实例。1、饿汉式在类加载到内存时,就实例化了一个单例对象,jvm保证线程安全。无参构造方法用 private 修饰,防止被 new 实例化。提供 public 方法 getInstance(),让调用方获取唯一的对象原创 2022-04-15 17:42:56 · 560 阅读 · 0 评论