设计模式
文章平均质量分 85
_elvan
路虽远,行则将至,事虽难,做则必成
展开
-
设计模式二十四:访问者模式(Visitor Pattern)
用于将数据结构与数据操作分离,使得可以在不修改数据结构的情况下,定义新的操作。访问者模式的核心思想是,将数据结构和操作进行解耦,从而使得新增操作时不必修改数据结构,只需添加新的访问者。主要目的是在不改变数据结构的情况下,为数据结构中的元素添加新的操作,从而满足开闭原则(对扩展开放,对修改封闭)原创 2023-08-25 17:39:31 · 831 阅读 · 0 评论 -
设计模式二十三:模板方法模式(Template Method Pattern)
定义了一个算法的框架,将算法的具体步骤延迟到子类中实现。这样可以在不改变算法结构的情况下,允许子类重写算法的特定步骤以满足自己的需求。原创 2023-08-24 18:54:53 · 1546 阅读 · 0 评论 -
设计模式二十二:策略模式(Strategy Pattern)
定义一系列算法,将每个算法封装成独立的对象,并使这些对象可互相替换。这使得在运行时可以动态地选择算法,而不必改变使用算法的客户端代码。策略模式的主要目标是将算法的定义与使用分离,使得客户端可以根据需要灵活地选择和切换不同的算法,而不影响到客户端代码的稳定性。原创 2023-08-23 18:02:10 · 774 阅读 · 0 评论 -
设计模式二十一:状态模式(State Pattern)
一个对象的内部状态发生变化时,允许对象改变其行为。这种模式使得一个对象看起来好像在运行时改变了它的类,主要目的是将状态的行为从主要对象中分离出来,使得主要对象不必包含所有状态的逻辑,而是将每个状态的行为封装在独立的类中。这有助于减少代码的重复,提高代码的可维护性和可扩展性。原创 2023-08-22 17:57:03 · 1231 阅读 · 1 评论 -
设计模式二十:观察者模式(Observer Pattern)
定义了一种一对多的依赖关系,允许多个观察者(也称为订阅者)对象同时监听一个主题对象,当主题对象发生变化时,所有依赖于它的观察者都会收到通知并自动更新。原创 2023-08-21 18:35:13 · 1082 阅读 · 0 评论 -
设计模式十九:备忘录模式(Memento Pattern)
备忘录模式是一种行为型设计模式,它允许对象在不暴露其内部状态的情况下捕获和恢复其状态。该模式的主要目标是在不破坏封装性的前提下,实现对象状态的备份和恢复。备忘录模式常用于需要保存对象历史状态、撤销操作或者实现快照功能的情况。原创 2023-08-18 17:55:15 · 508 阅读 · 0 评论 -
设计模式十八:中介者模式(Mediator Pattern)
在中介者模式中,多个对象之间不再直接相互通信,而是通过一个中介者对象进行通信。这可以减少对象之间的依赖关系,使系统更加模块化。中介者模式适用于当对象之间的通信逻辑变得复杂,导致代码难以维护和理解时。原创 2023-08-17 18:14:23 · 418 阅读 · 0 评论 -
设计模式十七:迭代器模式(Iterator Pattern)
迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供了一种访问聚合对象(例如列表、集合、数组等)中各个元素的方法,而无需暴露其内部表示。迭代器模式将遍历元素和访问元素的责任分离开来,使得代码更加灵活、可扩展和易于维护。迭代器模式的核心思想是抽象出一个迭代器接口,该接口定义了访问和遍历元素的方法,然后不同的聚合对象实现这个接口以提供自己的迭代器。这样,客户端代码就可以通过迭代器遍历聚合对象中的元素,而无需关心聚合对象的具体实现细节。原创 2023-08-16 18:31:44 · 764 阅读 · 0 评论 -
设计模式十六:解释器模式(Interpreter Pattern)
解释器模式是一种行为型设计模式,它用于定义一个语言的文法规则,并且通过解释器来解释执行这些语言中的句子。这种模式通常用于处理一些特定领域的语言,例如编译器、解析器、正则表达式等,解释器模式的核心思想是将一个语言表达式表示为一个抽象语法树(AST),然后通过解释器来逐步解释和执行这个语法树。原创 2023-08-15 18:53:27 · 525 阅读 · 0 评论 -
设计模式十五:命令模式(Command Pattern)
命令模式(Command Pattern)是一种行为型设计模式,它旨在将请求或操作封装成一个对象,从而允许你将不同的请求参数化,并且能够在不同的时间点执行或者队列化这些请求。这种模式使得请求发送者与接收者之间解耦,同时也支持撤销操作和日志记录。原创 2023-08-15 11:20:50 · 1156 阅读 · 0 评论 -
设计模式十四:责任链模式(Chain of Responsibility Pattern)
责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许你将请求沿着处理者链进行传递,直到有一个处理者能够处理该请求。在责任链模式中,多个处理者对象被连接成一个链。当接收到一个请求时,每个处理者会判断自己是否有能力来处理该请求,如果可以处理则直接处理,如果不能处理,则将请求传递给链中的下一个处理者。这样,请求就会依次经过整个链,直到找到一个合适的处理者处理请求或者请求到达链的末端仍然没有处理者能够处理。原创 2023-08-10 18:32:01 · 1132 阅读 · 0 评论 -
设计模式十三:代理(Proxy Pattern)
代理模式是一种结构型设计模式,它允许通过在对象和其真实服务之间添加一个代理对象来控制对该对象的访问。代理对象充当了客户端和真实服务对象之间的中介,并提供了额外的功能,如远程访问、延迟加载、访问控制等。原创 2023-08-09 18:15:40 · 540 阅读 · 0 评论 -
设计模式十二:享元模式(Flyweight Pattern)
当我们需要创建大量相似对象时,享元模式可以帮助我们节省内存空间和提高性能。该模式通过共享相同的数据来减少对象的数量。在享元模式中,有两种类型的对象:享元(Flyweight)和非享元(Unshared Flyweight)。享元对象是可共享的,它包含内部状态和外部状态。内部状态是不变的,它可以在多个对象之间共享。外部状态是会变化的,它由客户端代码传递给享元对象,因此它不能被共享。享元模式的核心思想是将相同的外部状态提取出来作为共享对象,在使用时通过传递外部状态进行对象的定制。原创 2023-08-08 19:18:27 · 680 阅读 · 0 评论 -
设计模式十一:外观模式(Facade Pattern)
外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口,用于访问系统中的一组复杂子系统。外观模式通过将复杂子系统的接口封装在一个高层接口中,简化了客户端与子系统之间的交互,使得客户端代码更加清晰、简洁。原创 2023-08-07 18:34:14 · 845 阅读 · 0 评论 -
设计模式十:装饰器(Decorator)
现实生活中,常常需要对现有产品增加新的功能或美化其外观,如房子装修、相片加相框等,都是装饰器模式装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许在运行时为对象动态地添加额外的行为或功能,而无需修改原始类的代码。该模式通过创建一个包装器,即装饰器,来包裹原始对象,并以透明的方式扩展其功能。装饰器和原始对象都实现了相同的接口,这使得它们可以互相替代使用。原创 2023-08-04 17:22:07 · 530 阅读 · 0 评论 -
设计模式九:组合模式(Composite Pattern)
组合模式是一种结构型设计模式,它允许我们将对象组合成树形结构来表示“整体-部分”层次关系。组合模式使得用户可以以相同的方式处理单个对象和组合对象。在组合模式中,有两种主要类型的对象:叶子对象和组合对象。叶子对象代表树结构中的最终节点,它们没有子节点。而组合对象代表树结构中的中间节点,它们可以包含子节点。通过使用组合模式,我们可以创建具有的对象,并且可以递归地处理这些对象。这种递归性质使得组合模式非常适用于处理树状数据结构,例如文件系统、组织架构等。原创 2023-08-03 18:41:34 · 792 阅读 · 0 评论 -
设计模式八:桥接模式(Bridge Pattern)
桥接模式是一种结构型设计模式,用于将抽象与实现分离,使它们可以独立地变化。桥接模式的核心思想是将一个大类或多个紧密相关的类分为两个独立的层次结构,从而实现解耦。在桥接模式中,存在:抽象部分和实现部分。抽象部分定义了高层逻辑,而实现部分则提供了底层的具体实现。通过将这两个部分分离,并使用桥接模式连接它们,可以在不修改现有代码的情况下方便地扩展和修改系统。原创 2023-08-02 19:20:27 · 803 阅读 · 0 评论 -
设计模式七:适配器模式(Adapter Pattern)
适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换成客户端所期望的另一个接口。它允许不兼容的接口能够协同工作。原创 2023-08-01 12:33:28 · 434 阅读 · 0 评论 -
如何解决单例数量太多占用内存的问题
当单例数量太多导致占用过多内存时,可以考虑以下几种方式来解决这个问题:原创 2023-07-31 20:13:20 · 366 阅读 · 0 评论 -
设计模式六:原型模式(Prototype Pattern)
原型模式是一种创建对象的设计模式。它允许我们通过复制一个现有对象来创建新的对象,而无需知道其具体实现细节。在使用原型模式时,我们首先创建一个原始对象,然后根据需要复制该对象,以获得新创建的对象。原型模式的主要思想是基于对象的复制。通过使用原型模式,我们可以避免直接实例化对象,从而提高性能和代码灵活性。此外,原型模式还可以用于创建复杂的对象结构,因为它允许我们在创建对象时使用已经存在的对象作为蓝图。原创 2023-07-31 20:01:58 · 628 阅读 · 0 评论 -
设计模式五:建造者模式(Builder Pattern)
建造者模式(Builder Pattern)是一种创建型设计模式,用于通过一系列步骤来构建复杂对象。它将对象的构建过程与其表示分离,从而允许相同的构建过程可以创建不同的表示。原创 2023-07-28 17:02:15 · 562 阅读 · 0 评论 -
设计模式四:单例模式(Singleton)
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。使用工厂方法来限制实例化过程。这个方法应该是静态方法(类方法),因为让类的实例去生成另一个唯一实例毫无意义。原创 2023-07-27 18:06:55 · 1054 阅读 · 0 评论 -
设计模式三:抽象工厂模式(Abstract Factory Pattern)
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种方式来创建一系列相关或相互依赖的对象,而无需指定具体实现类。在软件开发中,有时候需要根据不同的条件或环境来创建一组相关的对象。抽象工厂模式将对象的创建逻辑封装在一个抽象工厂接口中,该接口声明了一系列用于创建不同类型对象的方法。具体的工厂类实现了这个接口,每个具体工厂类负责创建一组相关的对象。原创 2023-07-26 18:23:51 · 620 阅读 · 0 评论 -
设计模式二:工厂方法模式(Factory Method Pattern)
工厂模式是一种创建型设计模式,它提供了一种通过抽象工厂来创建对象的方式。在工厂模式中,我们定义一个接口或抽象类作为工厂,该工厂有多个具体的实现类。每个具体工厂类都负责创建不同类型的对象。原创 2023-07-25 15:27:14 · 256 阅读 · 0 评论 -
设计模式一:简单工厂模式(Simple Factory Pattern)
简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,它提供了一个通用的接口来创建各种不同类型的对象,而无需直接暴露对象的创建逻辑给客户端。原创 2023-07-25 15:25:35 · 366 阅读 · 0 评论 -
开发原则六:迪米特法则LOD
一个对象应该对其他对象有限的了解,只与直接朋友进行通信。直接朋友包括以下几类:该对象本身以参数形式传入到该对象方法中的对象该对象所创建的对象该对象的成员变量引用的对象根据迪米特法则,当我们设计一个对象时,应该尽量避免让该对象调用非直接朋友的方法。这样可以降低类之间的依赖关系,提高系统的可维护性和灵活性。原创 2023-07-20 18:17:20 · 94 阅读 · 0 评论 -
开发原则五:接口隔离ISP
在软件工程领域,接口隔离原则(ISP)规定不应强迫客户端依赖它不使用的方法。ISP将非常大的接口拆分为更小和更具体的接口,以便客户端只需知道它们感兴趣的方法。这种缩小的接口也称为角色接口。ISP旨在使系统分离,从而更容易重构,更改和重新部署。ISP是面向对象设计的五个SOLID原则之一,类似于GRASP的高内聚原则。原创 2023-07-19 17:33:28 · 118 阅读 · 0 评论 -
开发原则四:依赖倒置DIP
依赖倒置原则是Robert C. Martin在1996年为“C++Reporter”所写的专栏Engineering Notebook的第三篇,后来加入到他在2002年出版的经典著作“Agile Software Development, Principles,Parrerns,and Practices”一书中。依赖倒置原则(Dependency Inversion Principle,简称DIP)是面向对象设计的一个重要原则,它提倡抽象不应该依赖于具体实现,而是应该依赖于抽象。原创 2023-07-18 18:53:49 · 109 阅读 · 0 评论 -
开发原则三:里氏替换原则LSP
里氏替换原则(Liskov Substitution Principle)是面向对象设计的一个基本原则之一,它由《面向对象分析与设计》一书的作者Barbara Liskov教授在1987年提出。原创 2023-07-17 18:58:45 · 96 阅读 · 0 评论 -
开发原则二:单一职责SRP
单一职责原则(Single Responsibility Principle,SRP)又称单一功能原则,由罗伯特·C.马丁(Robert C. Martin)于《敏捷软件开发:原则、模式和实践》一书中提出的。这里的职责是指类变化的原因,单一职责原则规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分(There should never be more than one reason for a class to change)单一职责原则是 OOP 的一个基本原则,它指出一个类应该只有一个职责。原创 2023-07-15 16:46:20 · 68 阅读 · 0 评论 -
开发原则一:开闭原则OCP
需求总是变化”、“世界上没有一个软件是不变的”。这里投射出的意思是:需求总是变化的, 可是对于软件设计者来说, 如何才能做到不对原有系统修改的前提下, 实现灵活的扩展. 这就是开闭原则要实现的.我们在设计系统的时候, 不可能设想一次性把需求确定后, 后面就不改变了.这不科学也不现实的. 既然需求是一定会变化的, 那么我们要如何优雅的面对这种变化呢?如何设计可以使软件相对容易修改, 不至于需求一变, 就要把整个程序推到重来?开闭原则的定义是:“软件实体(类、模块、函数等)应该对扩展开放,对修改关闭”。原创 2023-07-15 10:50:55 · 66 阅读 · 0 评论