喵叔哟
一个关注AI和Java的.NET程序员
展开
-
【地铁上的设计模式】--目录
目录前言创建型模式工厂方法模式抽象工厂模式单例模式–懒汉模式单例模式–饿汉模式单例模式–双重检验锁单例单例模式–静态内部类单例单例模式–枚举单例原型模式建造者模式结构型模式适配器模式桥接模式组合模式装饰器模式外观模式享元模式代理模式行为型模式职责链模式命令模式解释器模式迭代器模式中介者模式备忘录模式观察者模式状态模式策略模式模板方法模式访问者模式原创 2023-05-13 14:52:11 · 149 阅读 · 0 评论 -
【地铁上的设计模式】--前言
第一部分介绍了设计模式的概念和基本原理,为后续的深入学习奠定了基础。第二部分包括创建型模式,这些模式关注对象的创建和初始化,包括工厂方法模式、抽象工厂模式、单例模式、建造者模式和原型模式。第三部分包括结构型模式,这些模式关注对象的组合和关系,包括适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式和代理模式。第四部分包括行为型模式,这些模式关注对象之间的交互和协作,包括责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。原创 2023-04-28 10:54:54 · 142 阅读 · 0 评论 -
【地铁上的设计模式】--创建型模式:工厂方法模式
创建型模式是指处理对象创建的设计模式,它们的共同目标是通过某种方式控制对象的创建,以达到更灵活、更可扩展的设计。创建型模式通常涉及到将对象的创建与使用分离,通过专门的工厂类、构造函数、克隆、抽象工厂、建造者等方式来创建对象。这种方式可以隐藏对象的创建细节,使得对象的创建和使用松耦合,提高了系统的灵活性和可维护性。工厂方法模式抽象工厂模式单例模式原型模式建造者模式这些模式都有不同的特点和使用场景,可以根据具体情况选择合适的模式来实现对象的创建。原创 2023-04-23 00:32:46 · 442 阅读 · 0 评论 -
【地铁上的设计模式】--创建型模式:抽象工厂模式
抽象工厂模式是一种创建型设计模式,它提供了一种方式来封装一组相关或相互依赖的对象的创建过程。抽象工厂模式将具体产品的创建与客户端代码分离开来,通过引入抽象工厂和抽象产品来实现对象的解耦和隐藏。抽象工厂负责定义一组用于创建一系列产品对象的方法,每个方法对应一个具体产品族的创建过程。具体工厂类实现抽象工厂接口,负责创建具体产品对象,并且每个具体工厂类只能创建一种具体产品族的对象。抽象产品具体产品抽象工厂和具体工厂。原创 2023-04-23 00:51:13 · 462 阅读 · 0 评论 -
【地铁上的设计模式】--创建型模式:单例模式(一)--懒汉式单例
单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供了全局访问点。单例模式确保在系统中,该类只有唯一的一个实例存在,并提供了一个访问该实例的全局点,以便全局访问。单例模式常用于管理共享资源,例如线程池、缓存、日志对象等等,这些资源需要在整个应用程序中共享和访问。如果每次需要访问这些资源时都要创建一个新对象,不仅会影响程序性能,还会占用过多的系统资源。懒汉式单例:在需要时才创建单例对象,但是在多线程环境下需要使用同步来保证只有一个实例。原创 2023-04-23 01:05:26 · 421 阅读 · 0 评论 -
【地铁上的设计模式】--创建型模式:单例模式(二)--饿汉式单例
饿汉式单例模式是一种常用的创建型设计模式,它能够确保一个类只有一个实例,并提供了一个全局访问点。不同于懒汉式单例模式在需要时才去创建实例,饿汉式单例模式在类加载时就已经创建好了实例,因此也被称为饿汉式预先加载模式。这种模式的核心思想是在类被加载时就进行初始化,从而避免了线程同步问题。饿汉式单例模式的实现相对简单,只需要将构造函数设为私有,定义一个私有的静态变量保存单例实例,直接在类中进行实例化,提供一个公有的静态方法返回类的唯一实例即可。原创 2023-04-24 15:55:30 · 266 阅读 · 1 评论 -
【地铁上的设计模式】--创建型模式:单例模式(三)--双重检验锁单例
双重检验锁单例模式实现了懒汉式单例模式的延迟加载和饿汉式单例模式的线程安全。其主要思路是在获取单例实例时,先检查是否已经实例化,如果没有才进行同步块。在同步块内部再进行一次实例化检查,以确保只有一个实例被创建。这样,就能够在保证单例实例唯一性的同时,减少了多线程环境下的性能开销。双重检验锁单例模式能够确保只有一个实例被创建,并具有较好的性能表现和延迟创建的能力。其优点是在多线程环境下可以保证线程安全,并且可以延迟对象的创建,节省了系统资源。原创 2023-04-24 16:09:59 · 316 阅读 · 2 评论 -
【地铁上的设计模式】--创建型模式:单例模式(四)--静态内部类单例
静态内部类单例是一种单例模式的实现方式,它使用一个私有的静态内部类来持有单例对象,从而保证单例对象的唯一性。静态内部类只有在被调用时才会被加载,同时创建唯一的单例对象。由于静态内部类只会被加载一次,因此它也具有懒加载的能力。静态内部类单例既保证了线程安全,又具有较好的性能表现,是一种比较优秀的单例模式实现方式。静态内部类单例模式能够实现延迟加载、线程安全和高效访问,且实现简单,是单例模式中最优秀的一种实现方式。其缺点是不能够通过反射来创建新的实例,需要特殊处理。原创 2023-04-24 17:33:37 · 462 阅读 · 0 评论 -
【地铁上的设计模式】--创建型模式:单例模式(五)--枚举单例
枚举单例是指使用枚举类型来实现单例模式,它是单例模式中最简单、最安全的一种实现方式。在枚举类型中定义的枚举值只会被实例化一次,即保证了全局唯一的实例,而且实现简单、线程安全、防止反射攻击、支持序列化等。枚举单例是一种非常简单、安全且可靠的单例实现方式。在Java和C#中,枚举类型是天然的单例类型,可以通过定义枚举常量来实现单例。枚举单例不仅避免了线程安全问题,还可以防止反序列化和反射攻击,因此是一种非常优秀的单例实现方式。不过,由于枚举单例的实现方式比较特殊,可能会增加代码的复杂性和理解难度。原创 2023-04-25 11:34:45 · 782 阅读 · 0 评论 -
【地铁上的设计模式】--创建型模式:原型模式
原型模式是一种创建型设计模式,它通过复制现有对象来创建新对象。该模式基于一个原型对象,通过克隆来创建新的对象,避免了创建过程中的复杂配置。原型模式分为浅拷贝和深拷贝两种类型,浅拷贝只复制对象的基本类型数据和引用类型的引用,而深拷贝则复制了整个对象,包括对象内部的引用类型。原型模式适用于需要创建大量相似对象的场景,可以提高代码复用性,减少对象创建的开销。原型模式是一种创建型模式,它通过复制现有的实例来创建新的对象,避免了重复创建相同的对象,提高了系统性能和可维护性。原创 2023-04-25 13:45:46 · 460 阅读 · 0 评论 -
【地铁上的设计模式】--创建型模式:建造者模式
建造者模式(Builder Pattern)是一种创建型设计模式,它允许逐步创建复杂对象,同时分离出对象的构造过程和表示。该模式将构造复杂对象的过程分解为多个简单的步骤,使得相同的构造过程可以创建不同的表示形式。建造者模式通常适用于构造复杂对象或需要生成多个不同表示的对象。与其他创建型模式相比,建造者模式更加关注对象的构建过程,而不是创建过程。建造者模式是一种创建型设计模式,它通过将一个复杂对象的构造过程分解为多个简单的步骤,使得我们能够逐步构建该对象。原创 2023-04-27 23:17:18 · 526 阅读 · 0 评论 -
【地铁上的设计模式】--结构型模式:适配器模式
结构型模式是一种设计模式,它描述了如何将类或对象结合在一起形成更大的结构,以提供新的功能或实现更复杂的行为。适配器模式(Adapter Pattern):将一个类的接口转换成客户端所期望的另一种接口,从而让原本因接口不兼容而不能一起工作的类能够一起工作。桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。组合模式(Composite Pattern):将对象组合成树形结构以表示“部分-整体”的层次结构,使得客户端对单个对象和组合对象的使用具有一致性。原创 2023-04-30 23:29:15 · 1954 阅读 · 0 评论 -
【地铁上的设计模式】--结构型模式:桥接模式
桥接模式是一种结构型设计模式,它通过将抽象与实现分离来提高代码的可扩展性。桥接模式的关键是使用抽象类或接口来代表抽象部分,使用具体类来代表实现部分,然后使用组合将两者连接起来。通过这种方式,桥接模式使得抽象部分和实现部分可以独立地扩展,而不会相互影响。桥接模式的优点包括:可扩展性好,可以独立地扩展抽象部分和实现部分,不会相互影响;可维护性好,抽象部分和实现部分分离,易于维护;可复用性好,可以重用已有的抽象类和实现类。缺点是:增加了系统的复杂性,需要额外的抽象类和接口。原创 2023-05-01 21:14:01 · 1043 阅读 · 0 评论 -
【地铁上的设计模式】--结构型模式:组合模式
组合模式是一种结构型设计模式,将对象组合成树形结构,以表示部分整体的层次结构,让用户对单个对象和组合对象的使用具有一致性。在组合模式中,抽象构件定义了一个统一的接口,用于管理所有对象,叶子节点和组合节点都实现了该接口。叶子节点表示单个对象,而组合节点表示包含其他节点的对象。组合模式通过递归组合实现了树形结构,使得用户在使用组合对象时无需关心具体节点的类型,可以像处理单个对象一样处理整个组合对象,从而简化了客户端代码。原创 2023-05-01 21:25:20 · 1889 阅读 · 0 评论 -
【地铁上的设计模式】--结构型模式:装饰器模式
装饰器模式是一种结构型设计模式,它允许你通过将对象放入包含行为的特殊封装对象中来为原对象添加新的行为,同时又不改变原有对象的结构。装饰器模式中,包装器对象和被包装对象实现了相同的接口,因此客户端无需知道具体的实现细节,只需通过接口即可使用包装器对象。这种模式能够让你在不修改现有代码的情况下,为已有对象增加新的功能。装饰器模式是一种结构型设计模式,它允许在运行时动态地为对象添加功能,而无需通过继承来实现。该模式可以增强代码的灵活性和可扩展性,并且遵循开放/封闭原则。原创 2023-05-01 21:31:17 · 1028 阅读 · 0 评论 -
【地铁上的设计模式】--结构型模式:外观模式
外观模式是一种结构型设计模式,它为一组复杂的子系统提供了一个简单的接口,以便于客户端和子系统进行交互。这个接口隐藏了子系统的复杂性,并且只暴露了子系统对客户端有用的功能。外观模式的主要思想是通过一个外观类来封装子系统中的复杂业务逻辑,使客户端无需了解子系统的内部实现细节,从而降低了客户端的复杂性和耦合度。简化了客户端的使用,减少了客户端与子系统之间的耦合;提高了代码的可维护性和可扩展性,由于客户端只与外观类交互,所以当子系统发生变化时,只需要修改外观类即可,不会影响到客户端;原创 2023-05-02 18:46:16 · 1013 阅读 · 0 评论 -
【地铁上的设计模式】--结构型模式:享元模式
享元模式是一种结构型设计模式,旨在通过尽可能多地共享内部状态来最大化共享对象的数量,从而减少系统中对象的数量。这种模式适用于需要创建大量细粒度对象的情况,并且它可以大幅降低内存使用和对象创建的开销。在享元模式中,对象可以分为两类:内部状态和外部状态。内部状态是可以共享的,通常保存在享元对象内部,并且不会随着时间的推移而改变。而外部状态则是不可共享的,它通常取决于具体场景,并在运行时传递给享元对象。这种模式的主要思想是在内存中维护一个对象池,用于存储共享的对象。原创 2023-05-02 23:30:54 · 698 阅读 · 0 评论 -
【地铁上的设计模式】--结构型模式:代理模式
代理模式是一种结构型设计模式,通过代理对象控制对原始对象的访问。代理对象充当客户端和实际对象之间的中介,隐藏了实际对象的复杂性,并提供了一些额外的控制。在软件系统中,代理模式可以有多种应用。例如,代理模式可以用于实现远程代理、虚拟代理、保护代理和智能代理等。远程代理是指代理对象用于在不同的地址空间中代表实际对象。虚拟代理是指代理对象在访问实际对象时先加载一些开销较小的信息,等到需要时再加载开销较大的信息。保护代理是指代理对象控制对实际对象的访问,以保护实际对象不被意外修改。原创 2023-05-04 23:40:17 · 770 阅读 · 0 评论 -
【地铁上的设计模式】--行为型模式:职责链模式
行为模式是面向对象编程中,一组用于处理对象间交互的设计模式。行为模式主要关注的是对象之间的责任分配和行为控制。模板方法模式(Template Method Pattern)模板方法模式定义了一个算法框架,将一些步骤的具体实现交由子类去完成,从而使得算法框架和步骤的具体实现分离开来。策略模式(Strategy Pattern)策略模式定义了一系列算法,将每个算法封装成独立的对象,使它们可以互换。观察者模式(Observer Pattern)原创 2023-05-05 22:58:28 · 492 阅读 · 0 评论 -
【地铁上的设计模式】--行为型模式:命令模式
命令模式(Command Pattern)是一种行为型设计模式,它将请求(命令)封装成一个对象,以便在不同的上下文中使用,并支持将操作可撤销和重做。该模式的核心思想是将命令的发出者(客户端)和接收者(执行命令的对象)解耦,从而实现请求的发送者和接收者之间的解耦。Command(命令接口):声明执行操作的方法。ConcreteCommand(具体命令):将一个 Receiver 对象绑定于一个动作,调用 Receiver 中的相应操作,以实现 execute 方法。原创 2023-05-07 15:55:08 · 548 阅读 · 0 评论 -
【地铁上的设计模式】--行为型模式:解释器模式
解释器(Interpreter)是一种行为型设计模式,它用于解释一种特定的编程语言或表达式。它提供了一种解释一组语言语法的方法,使得用户可以按照特定的规则定义自己的语言,并通过解释器将其转化成可执行代码。在解释器模式中,包含两个角色:终结符和非终结符。终结符表示语法规则中的基本单元,而非终结符表示由终结符组成的语法规则。解释器模式通常使用抽象语法树(Abstract Syntax Tree, AST)来实现对语法规则的解释。原创 2023-05-07 20:31:09 · 656 阅读 · 0 评论 -
【地铁上的设计模式】--行为型模式:迭代器模式
迭代器模式是一种行为型设计模式,它提供了一种遍历聚合对象中各个元素的方法,而不需要暴露该聚合对象的内部表示。这个模式分离了聚合对象的遍历行为,使得遍历算法能够与聚合对象分离开来,从而可以在不改变聚合对象的情况下定义新的遍历操作。迭代器模式由迭代器接口、具体迭代器类、聚合接口和具体聚合类等组成,其中迭代器接口定义了访问和遍历元素的方法,而聚合接口定义了创建迭代器的方法。迭代器模式的实现可以大大简化遍历聚合对象中元素的代码,同时也可以方便地新增不同类型的迭代器,从而为聚合对象提供不同的遍历行为。原创 2023-05-08 02:14:26 · 525 阅读 · 0 评论 -
【地铁上的设计模式】--行为型模式:中介者模式
中介者模式是一种行为设计模式,它允许将对象之间的通信封装到一个中介者对象中。在这种模式中,对象不再直接相互通信,而是通过中介者进行交互。这可以降低对象之间的耦合度,并使代码更易于维护和扩展。中介者模式通常用于需要大量对象相互交互的场景,例如GUI应用程序或多人游戏。通过将所有对象的通信集中在中介者中,可以更好地控制和管理系统中的交互行为。此外,中介者模式还可以支持系统中的松耦合设计,从而更容易地扩展和修改系统中的对象和行为。原创 2023-05-11 00:50:42 · 566 阅读 · 0 评论 -
【地铁上的设计模式】--行为型模式:备忘录模式
备忘录模式(Memento Pattern)是一种行为型设计模式,其目的是在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存该状态,以便之后恢复对象到该状态。该模式可以使得对象的状态历史可以被保存和管理。Originator:原发器,负责创建一个备忘录,用于记录当前状态,并可以根据备忘录恢复其状态。Memento:备忘录,用于存储 Originator 的状态。Caretaker:负责保存备忘录。备忘录模式的优点是可以实现对象状态的保存和恢复,而且可以保证数据的安全性和封装性。原创 2023-05-11 01:05:16 · 486 阅读 · 0 评论 -
【地铁上的设计模式】--行为型模式:观察者模式
观察者模式(Observer Pattern)是一种设计模式,它定义了对象之间一对多的依赖关系,当一个对象状态发生改变时,其所有依赖者都会收到通知并自动更新。观察者模式中,被观察者对象通常被称为主题(Subject),而观察者对象通常被称为观察者(Observer)。在观察者模式中,主题维护一个观察者列表,当主题的状态发生变化时,它会依次通知所有的观察者,使它们能够及时更新自己的状态。这种松耦合的设计模式使得主题和观察者之间的关系不会影响彼此的稳定性,使得系统更加灵活和易于扩展。原创 2023-05-11 22:18:54 · 505 阅读 · 0 评论 -
【地铁上的设计模式】--行为型模式:状态模式
状态模式是一种行为模式,它允许对象在其内部状态发生改变时改变其行为。在状态模式中,将状态定义为独立的对象,并将对象在不同状态下的行为委托给具有相应行为的状态对象。当对象的状态发生变化时,它将使用不同的状态对象来执行不同的操作,从而使其行为随着状态的改变而改变。状态模式可以帮助我们更好地管理复杂的状态和转换,从而使代码更加清晰和易于维护。它还能够使我们更加灵活地添加和删除状态,而不会对其他部分产生影响。但是,状态模式也有一些缺点。首先,它可能导致类的数量增加,从而使代码变得复杂。原创 2023-05-12 22:44:54 · 806 阅读 · 0 评论 -
【地铁上的设计模式】--行为型模式:策略模式
策略模式是一种行为型设计模式,它允许在运行时选择算法的行为。这种模式通过定义一系列算法,并将每个算法封装到一个独立的类中,使得它们可以相互替换。通过这种方式,客户端可以根据需要选择要使用的算法,而不必与特定算法相关的实现细节耦合在一起。策略模式适用于需要根据特定条件在多种算法之间进行切换的场景。它可以使代码更具可读性和可维护性,同时还能提高代码的灵活性和可扩展性。它还可以将算法的实现细节与客户端代码分离开来,从而使得算法可以更容易地进行修改和维护。原创 2023-05-12 22:52:22 · 724 阅读 · 0 评论 -
【地铁上的设计模式】--行为型模式:模板方法模式
模板方法模式是一种行为设计模式,它定义了一个算法的骨架,将一些步骤的实现留给子类。这些步骤的实现可以在不改变算法骨架的前提下进行自定义,从而实现不同的行为。该模式在具有相似流程的操作中非常有用,可以减少代码冗余并提高代码重用性。模板方法模式的优点是可以提高代码的重用性和可维护性。由于相同的算法骨架被用于不同的实现,因此避免了代码重复的情况。此外,模板方法模式还可以简化代码,因为模板方法模式将代码分为多个类和方法,使得代码更加清晰易懂。缺点是模板方法模式可能会使得代码变得过于抽象,从而导致难以理解和调试。原创 2023-05-13 15:37:21 · 704 阅读 · 0 评论 -
【地铁上的设计模式】--行为型模式:访问者模式
访问者模式(Visitor Pattern)是一种行为型设计模式,它能够将算法与数据结构分离,使得算法可以独立于数据结构进行变化。它在不改变数据结构的前提下,定义了作用于数据结构中各个元素的新操作,即“访问者”,使得新增操作更加简单。访问者模式中,数据结构和操作是分开的,因此当需要新增一种操作时,只需增加相应的访问者即可,无需修改数据结构的代码,从而降低了系统的耦合度。在访问者模式中,数据结构中的每个元素都有一个accept方法,它接收一个访问者作为参数,从而实现访问者对该元素的操作。原创 2023-05-13 15:46:35 · 649 阅读 · 0 评论