23种设计模式扫盲

设计模式分为创建型、结构型和行为型三类。创建型模式如单例、工厂和建造者模式关注对象创建;结构型模式包括代理、适配器和组合模式,关注对象组合和结构;行为型模式如观察者、策略和状态模式关注对象间交互和行为。这些模式旨在提高代码的灵活性、可维护性和可读性。
摘要由CSDN通过智能技术生成

设计模式

设计模式总体来说分为三大类:

创建型模式(5种):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

结构型模式(7种):适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

创建型模式

总的来说,创建型模式主要关注对象的创建初始化过程,使得代码更加灵活和可维护。这些模式可以封装对象的创建过程,同时也可以控制对象的创建方式和数量。使用这些模式可以避免创建对象的复杂性,提高代码的可读性和可维护性。

单例模式

单例模式(Singleton Pattern):这是一种创建型模式,它保证一个类仅有一个实例,并提供一个全局访问点。单例模式在需要控制资源的使用情况下很有用,例如数据库连接、线程池等。单例模式可以避免多个对象间的冲突问题,并且可以提高代码的可读性和可维护性。

工厂模式

工厂模式(Factory Pattern):这是一种创建型模式,它提供了一种创建对象的方法,而无需指定具体的类。工厂模式分为简单工厂、工厂方法和抽象工厂三种。它们的共同目的是封装对象的创建过程,使得代码更加灵活和可维护。

简单工厂

工厂方法

抽象工厂

抽象工厂模式(Abstract Factory Pattern):这是一种创建型模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定具体的类。抽象工厂模式可以将一个产品族的创建过程封装在一起,使得客户端无需知道具体的实现细节。

建造者模式

建造者模式(Builder Pattern):这是一种创建型模式,它将复杂对象的创建过程分解成多个简单的部分,并按照一定的顺序组装起来。建造者模式使得对象的创建过程与具体部件的表示相分离,使得同样的构建过程可以创建不同的表示。

原型模式

原型模式(Prototype Pattern):这是一种创建型模式,它通过复制现有的实例来创建新的实例。原型模式可以避免复杂对象的创建过程,并且可以提高代码的可维护性和可扩展性。原型模式适用于对象的创建过程比较复杂,或者对象的创建需要较多的时间和资源的情况下。

结构型模式

代理模式

代理模式(Proxy Pattern):这是一种结构型模式,它为另一个对象提供一个代理,从而控制对该对象的访问。代理模式可以在不改变原有代码的情况下,对对象的访问进行控制和限制,同时也可以降低系统的耦合度。

桥接模式

桥接模式(Bridge Pattern):这是一种结构型模式,它将抽象部分与实现部分分离,使它们能够独立地变化。桥接模式可以将一个复杂的类分解为两个独立的类,分别处理抽象部分和实现部分,从而使得系统更加灵活和可维护。

装饰器模式

装饰器模式(Decorator Pattern):这是一种结构型模式,它可以在不修改原有对象的基础上,动态地给对象添加新的功能。装饰器模式使用了对象组合的方式,将装饰器对象和被装饰对象组合在一起,形成一个完整的对象。装饰器模式可以灵活地扩展对象的功能,同时也可以避免继承带来的类爆炸问题。

适配器模式

适配器模式(Adapter Pattern):这是一种结构型模式,它将一个类的接口转换为客户端所期望的另一种接口,从而使得原本由于接口不兼容而不能一起工作的类能够一起工作。适配器模式通常用于系统的升级和集成,可以将现有的类和接口转换为新的类和接口,以满足客户端的需求。

外观模式

外观模式(Facade Pattern):这是一种结构型模式,它提供了一个简化接口,从而隐藏了系统的复杂性。外观模式可以将系统中的多个复杂子系统封装起来,形成一个简单的接口,使得客户端能够更加容易地使用系统。

组合模式

组合模式(Composite Pattern):这是一种结构型模式,它允许将对象组合成树形结构来表示整体-部分的层次结构。组合模式可以使得客户端可以像处理单个对象一样处理对象的组合,从而简化了客户端的代码。

享元模式

享元模式(Flyweight Pattern):这是一种结构型模式,它使用共享对象来有效地支持大量细粒度的对象。享元模式可以避免创建大量相似对象所带来的内存浪费问题,从而提高了系统的性能和可扩展性。

行为型模式

观察者模式

观察者模式(Observer Pattern):这是一种行为型模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象状态发生改变时,它会通知所有的观察者对象,从而使得观察者对象能够自动更新自己的状态。观察者模式可以使得主题和观察者之间的关系变得松耦合,同时也可以在运行时动态地添加和删除观察者对象。

模板方法模式

模板方法模式(Template Method Pattern):这是一种行为型模式,它定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤,从而实现了代码的复用和扩展。

策略模式

策略模式(Strategy Pattern):这是一种行为型模式,它定义了一系列的算法,并将每个算法封装起来,使得它们可以互相替换。策略模式使得算法的变化独立于使用它的客户端,从而可以在运行时动态地改变算法,而不需要修改客户端代码。

职责链模式

职责链模式(Chain of Responsibility Pattern):这是一种行为型模式,它将请求的发送者和接收者解耦,使得多个对象都有机会处理这个请求。职责链模式将多个处理对象串成一条链,每个处理对象都有可能处理请求,如果一个对象不能处理请求,则将请求传递给下一个对象,直到有一个对象处理该请求或者没有对象可以处理为止。

状态模式

状态模式(State Pattern):这是一种行为型模式,它允许对象在内部状态发生改变时改变它的行为。状态模式将一个对象的状态表示成一个对象,从而使得状态转换可以变得可管理和更加简单,同时也可以将状态与特定的行为关联起来。

有限状态机

有限状态机(Finite State Machine, FSM),简称为状态机。状态机有 3 个组成部分:状态 (State)、事件(Event)、动作(Action)。其中,事件也称为转移条件(Transition Condition)。事件触发状态的转移及动作的执行。不过,动作不是必须的,也可能只转移状态,不执行任何动作。

状态机的实现方法

  1. 分支逻辑法

  2. 查表法

    状态机用二维表来表示:如第⼀维表示当前状态,第二维表示事件,值表示当前状态经过事件之后,转移到的新状态及其执行的动作。

  3. 状态模式

    状态模式通过将事件触发的状态转移和动作执行,拆分到不同的状态类中,来避免分⽀判断逻辑。

迭代器模式

迭代器模式(Iterator Pattern):这是一种行为型模式,它提供一种方法访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。迭代器模式可以使得客户端能够以统一的方式遍历聚合对象中的各个元素,从而简化了客户端的代码。

访问者模式

访问者模式(Visitor Pattern):这是一种行为型模式,它将算法与对象结构分离开来,使得算法可以独立于对象结构而变化。访问者模式定义了一些操作,这些操作可以在访问对象的结构时被调用,从而实现对结构的处理。

备忘录模式

备忘录模式(Memento Design Pattern):备忘录模式,也叫快照(Snapshot)模式。具体来说,就是在不违背封装原则的前提下,捕获⼀个对象的内部状态,并在该对象之外保存这个状态,以便之后恢复对象为先前的状态。这个模式的定义表达了两部分内容:⼀部分是,存储副本以便后期恢复;另⼀部分是,要在不违背封装原则的前提下,进行对象的备份和恢复。

命令模式

命令模式(Command Pattern):这是一种行为型模式,它将请求封装成对象,从而使得可以用不同的请求来参数化其他对象。命令模式可以将请求的发送者和接收者解耦,从而使得可以独立地改变请求的发送者和接收者,同时也可以将请求排队、记录请求日志、支持撤销操作等。

解释器模式

解释器模式(Interpreter Design Pattern):解释器模式为某个语⾔定义它的语法(或者叫文法)表示,并定义⼀个解释器用来处理这个语法。实际上,这⾥的 “语⾔”不仅仅指我们平时说的中、英、⽇、法等各种语⾔。从⼴义上来讲,只要是能承载信息的载体,我们都可以称之为“语言”,比如,古代的结绳记事、盲⽂、哑语、摩斯密码等。

中介者模式

中介者模式(Mediator Pattern):这是一种行为型模式,它用一个中介对象来封装一系列的对象交互。中介者模式可以使各个对象之间的关系变得简单而清晰,同时也可以减少它们之间的耦合。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值