![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 97
分享个人对六大设计原则和二十三种设计模式的理解,以及在工作中的一些实际应用
码农桶子哥
不知名十八线码农,编程十余载,混迹于各大不知名工厂,擅长在工作中摸鱼划水,吹牛甩锅。热爱编程,不定期分享在实际开发工作中的一些心得,以及职业生涯中的感悟。欢迎大家互相关注,共同进步。
展开
-
【设计模式】享元模式
享元模式(Flyweight Pattern)是池技术的重要实现方式,是构造型模式之一,它通过与其他类似对象共享数据来减小内存占用。其定义如下:即:使用共享对象可有效地支持大量的细粒度的对象。享元模式是一种用于优化内存占用和提高性能的设计模式。它通过共享相同或相似的对象,减少内存占用,提高系统的性能和代码的复用性。在使用享元模式时,需要注意分离出内部状态和外部状态,维护一个存储享元对象的享元池,并处理好对象的共享和独立状态。享元模式适用于有大量相同或相似对象的系统,可以提高系统的性能和可扩展性。原创 2023-10-29 19:51:29 · 159 阅读 · 3 评论 -
【设计模式】解释器模式
解析器模式(Interpreter Pattern)是一种按照规定语法进行解析的方案,在现在项目中使用较少,其定义如下:即:给定一门语言,定义他的文法的表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。解释器模式是一种用于构建解释器的设计模式,它允许我们定义一个语言的文法规则,并构建一个解释器来解析和执行该语言中的句子。通过将语言的语法规则抽象成类的结构,解释器模式使得语言的解析和执行更加灵活、可扩展。原创 2023-10-22 12:08:08 · 417 阅读 · 5 评论 -
【设计模式】状态模式
状态模式(State Pattern),又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。其定义如下:即:当一个对象内在状态改变时允许改变行为,这个对象看起来像改变了其类型。对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。状态模式是一种行为设计模式,它允许一个对象在其内部状态改变时改变它的行为。通过将对象的状态和相关行为封装在对应的状态类中,状态模式使得代码更加清晰、易于维护。原创 2023-10-15 16:35:04 · 160 阅读 · 1 评论 -
【设计模式】访问者模式
访问者模式(Visitor Pattern),是一种相对简单的设计模式。其定义如下:即:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。访问者模式是一种行为型设计模式,它将数据结构与数据操作分离,使得在不改变数据结构的前提下可以定义作用于这些元素的新的操作。该模式主要针对系统中拥有固定类型数的对象结构,在其内提供一个accept()方法来接受访问者对象的访问。不同的访问者对同一个元素的访问内容是不同的,使得相同的元素集合可以产生不同的数据结果。原创 2023-10-06 11:50:19 · 220 阅读 · 6 评论 -
【设计模式】备忘录模式
备忘录(Memento Pattern)模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式。。其定义如下:即:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原来保存的状态。备忘录模式是一种行为型设计模式,它提供了一种可以恢复状态的机制。当需要保存对象内部状态时,可以通过备忘录类将状态信息保存在管理者类中。当需要恢复对象状态时,可以通过管理者类获取之前保存的备忘录,并将状态信息恢复到对象中。原创 2023-09-29 11:31:09 · 767 阅读 · 6 评论 -
【设计模式】门面模式
门面模式(Facade Pattern)也叫做外观模式,是一种比较常用的封装模式。其定义如下:即:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。门面模式是一种结构性设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口。门面模式的主要目的是将复杂的子系统封装起来,提供一个更简单的接口,使子系统更容易使用。门面模式适用于为复杂的模块或子系统提供一个简洁的访问接口、提高子系统的独立性和稳定性等场景。原创 2023-09-25 07:00:00 · 130 阅读 · 9 评论 -
【设计模式】观察者模式
观察者模式(Observer Pattern)是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。其定义如下:即:定义对象之间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。观察者模式是一种设计模式,用于在对象之间建立一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。原创 2023-09-24 08:15:00 · 120 阅读 · 0 评论 -
【设计模式】组合模式
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。即:将对象组合成树形结构以表示 “部分-整体” 的层次结构,使得用户对单个对象和组合对象的使用具有一致性。组合模式是一种设计模式,旨在将对象组合成树形结构以表示“部分-整体”的层次结构。它允许客户端代码以一致的方式处理对象和对象容器,无需关心处理的单个对象还是组合的对象容器。原创 2023-09-23 10:59:12 · 650 阅读 · 2 评论 -
【设计模式】迭代器模式
迭代器模式(Iterator Pattern) 目前已经是一个没落的设计模式,基本没人会单独写一个迭代器,除非是产品性质的开发。其定义如下:即:它提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。迭代器模式是一种行为型设计模式,它提供了一种方法,可以顺序访问集合对象中的各个元素,而不暴露该对象的内部表示。迭代器模式通过将集合对象的遍历行为分离出来,交给迭代器角色来完成,从而避免了容器内部细节的暴露,并符合单一职责原则。原创 2023-09-18 08:45:00 · 58 阅读 · 3 评论 -
【设计模式】适配器模式
适配器模式(Strategy Pattern) 又叫做变压器模式,是一种常用的设计模式。其定义如下:即:将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。其通用类图如下:fill:#333;stroke:1;fill:none;important;important;important;important;important;important;important;important;important;important;原创 2023-09-17 07:15:00 · 71 阅读 · 1 评论 -
【设计模式】策略模式
策略模式(Strategy Pattern) 是一种比较简单的设计模式,也叫做政策模式(Policy Pattern)。其定义如下:即:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换。其通用类图如下:fill:#333;stroke:1;fill:none;important;important;important;important;important;important;important;important;important;important;important;原创 2023-09-16 11:12:32 · 59 阅读 · 4 评论 -
【设计模式】单例模式
作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。原创 2023-08-21 08:00:00 · 82 阅读 · 3 评论 -
【设计模式】装饰模式
装饰模式(Decorator Pattern) 也称为包装模式,结构型设计模式之一。其定义如下:即:动态的给一个对象添加额外的职责,就增加功能来说, 装饰模式相比生成子类更为灵活。装饰模式是一种设计模式,旨在动态地给一个对象添加额外的职责,同时可以扩展对象的功能。相比传统的继承方式,装饰模式更加灵活,可以在运行时根据需要动态地添加或删除职责。在装饰模式中,有一个抽象的组件类和若干个具体的组件类,以及一个抽象的装饰器类和若干个具体的装饰器类。原创 2023-09-09 20:14:45 · 65 阅读 · 8 评论 -
【设计模式】责任链模式
责任链模式(Chain of Responsibility)是一种行为型设计模式,它允许将请求从一个对象传递到另一个对象,直到找到处理该请求的适当对象为止。。其定义如下:即:使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。责任链模式的重点是在“链”上,由一条链去处理相似的请求在链中决定谁来处理这个请求,并返回相应的结果,其通用类图如下:fill:#333;stroke:1;fill:none;原创 2023-09-05 09:00:00 · 70 阅读 · 8 评论 -
【设计模式】命令模式
命令模式(Command Pattern)是一个高内聚的模式,又称为行动(Action)模式或交易(Transaction)模式。其定义如下:即:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。命令模式是一种行为型设计模式,它将一个请求或操作封装为一个对象,从而将请求的发送者和接收者解耦。命令模式适用于需要抽象出对象行为、解耦发送者和接收者、支持撤销操作、记录或回放命令以及实现宏命令的场景。原创 2023-09-04 08:30:00 · 145 阅读 · 0 评论 -
【设计模式】中介者模式
中介者模式(Mediator Pattern)也叫做调停者模式,是一种常用的设计模式。其定义如下:即:用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立的改变它们之间的交互。中介者模式是一种设计模式,它用于减少多个对象之间的通信和依赖关系,通过引入一个中介者对象来管理和协调这些对象之间的交互。其主要目标是解耦同事对象之间的通信和依赖关系,使得同事对象之间的交互更加清晰和易于管理。原创 2023-09-03 08:00:00 · 54 阅读 · 0 评论 -
【设计模式】原型模式
原型模式(Prototype Pattern)的简单程度仅次于单例模式和迭代器模式。正是由于简单,使用的场景才非常多,其定义如下:即:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原创 2023-09-02 11:14:18 · 45 阅读 · 3 评论 -
【设计模式】代理模式
代理模糊模式(Proxy Pattern)是一种使用率非常高的设计模式。其定义如下:即:为其它对象提供一种代理以控制对这个对象的访问。原创 2023-08-29 09:00:00 · 42 阅读 · 1 评论 -
【设计模式】建造者模式
建造者模式(Abstract Factory Pattern)也叫做生成器模式,是一种常用的设计模式。其定义如下:即:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。原创 2023-08-28 08:30:00 · 68 阅读 · 1 评论 -
【设计模式】模板方法模式
模板方法模式(Abstract Factory Pattern)是一种非常常见的设计模式,在我们的生活和开发中无处不在。其定义如下:即:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。原创 2023-08-27 07:30:00 · 46 阅读 · 1 评论 -
【设计模式】抽象工厂模式
抽象工厂(Abstract Factory Pattern)是一种常用的设计模式,在我们的日常开发中总能见到它的身影。其定义为:即:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类。原创 2023-08-26 11:40:06 · 618 阅读 · 2 评论 -
【设计模式】工厂方法模式
工厂方法模式是类的创建模式,又叫做虚拟构造(Virtual Constructor)子模式或者多态性工厂(Polymorphic Factory)模式。工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。原创 2023-08-22 08:00:00 · 64 阅读 · 4 评论 -
【设计原则】开闭原则
开闭原则,在面向对象编程领域中,规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”,这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。原创 2023-08-20 06:00:00 · 699 阅读 · 0 评论 -
【设计原则】迪米特法则
迪米特法则是一种设计原则,它要求一个对象应当尽量少地与其他对象发生相互作用。具体来说,一个对象应该只与其直接的朋友发生通信,减少对象之间的依赖关系。原创 2023-08-19 15:02:43 · 420 阅读 · 0 评论 -
【设计原则】接口隔离原则
六大设计原则之接口隔离原则,英文名为Interface Segregation Principle, 又称ISP原则。即:客户端不应该依赖它不需要的接口。类间的依赖关系应该建立在最小的接口上。原创 2023-08-13 18:46:28 · 1429 阅读 · 8 评论 -
【设计原则】依赖倒置原则
在依赖倒置原则中的倒置指的是和一般OO设计的思考方式完全相反。每一个逻辑的实现都是由原子逻辑组成的,不可分割的原子逻辑就是低层模块(一般是接口,抽象类),原子逻辑的组装就是高层模块。在Java语言中,抽象就是指接口和或抽象类,两者都不能被直接实例化。细节就是实现类,实现接口或继承抽象类而产生的类就是细节,可以被直接实例化。模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的接口或抽象类不依赖于实现类实现类依赖于接口或抽象类。原创 2023-08-06 15:21:58 · 80 阅读 · 0 评论 -
【设计原则】里氏替换原则
里氏代换原则:任何基类可以出现的地方,子类一定可以出现。通俗理解:子类可以扩展父类的功能,但不能改变父类原有的功能。换句话说,子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。子类必须实现父类的抽象方法,但不得重写(覆盖)父类的非抽象(已实现)方法。子类中可以增加自己特有的方法。当子类覆盖或实现父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。原创 2023-08-05 13:02:05 · 174 阅读 · 0 评论 -
【设计原则】单一职责原则
单一职责原则的定义描述非常简单,也不难理解。一个类只负责完成一个职责或者功能。也就是说,不要设计大而全的类,要设计粒度小、功能单一的类。换个角度来讲就是,一个类包含了两个或者两个以上业务不相干的功能,那我们就说它职责不够单一,应该将它拆分成多个功能更加单一、粒度更细的类。在面向对象编程中,每个对象只负责自己的任务,比如该提供数据的就只是提供数据,该负责提供服务的就只提供服务,这样的开发方式代码耦合较低,较灵活,易扩展。原创 2023-07-30 16:01:28 · 91 阅读 · 0 评论