当前位置: 首页 >  网技达人 >  重温设计模式系列 --- 完整精华篇

重温设计模式系列 --- 完整精华篇

导读:引言.软件开发过程中,我们经常会遇到各种设计问题,例如如何管理对象之间的关系、如何优化代码的可复用性和可维护性等等。为了解决这些问题,我们可以使用设计模式。.设计模式是一种被广泛接受的软件设计思想,它提供了一套通用的解决方案,可以帮助我们更好地解决常见的软件设计问题。设计模式是从

引言

软件开发过程中,我们经常会遇到各种设计问题,例如如何管理对象之间的关系、如何优化代码的可复用性和可维护性等等。为了解决这些问题,我们可以使用设计模式。

设计模式是一种被广泛接受的软件设计思想,它提供了一套通用的解决方案,可以帮助我们更好地解决常见的软件设计问题。设计模式是从实践中总结出来的,它不仅可以提高代码的可读性和可维护性,还可以提高开发效率和代码的可复用性。

常见设计模式原则

设计模式有常见的五大原则 - SOLID

  • 单一职责原则(SRP)
  • 开放封闭原则(OCP)
  • 里氏替换原则(LSP)
  • 接口隔离原则(DIP)
  • 依赖倒置原则(ISP)

补充第六原则,迪米特法则(Law of Demeter,LoD)也称为最少知识原则(Least Knowledge Principle,LKP)

常见设计模式类型

  • 创建型模式:负责对象的创建和初始化,共有5种:工厂方法模式抽象工厂模式单例模式建造者模式原型模式
  • 结构型模式:负责对象的组合,共有7种:适配器模式装饰器模式代理模式外观模式桥接模式组合模式享元模式
  • 行为型模式:负责对象之间的通信,共有11种:观察者模式策略模式迭代器模式命令模式责任链模式模板方法模式访问者模式中介者模式解释器模式过滤器模式备忘录模式

目录

创建型模式

  1. 抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式是一种创建型设计模式,它提供了一种封装一组相关或相互依赖对象创建过程的方法,使得我们可以在不知道具体实现细节的情况下,创建一系列相互协作的对象。

  1. 工厂方法模式(Factory Method Pattern)

工厂方法模式是一种创建型设计模式,它提供了一种将对象的创建过程封装起来的方法,使得我们可以在不知道具体实现细节的情况下,创建各种不同类型的对象。

  1. 单例模式(Singleton Pattern)

单例模式是一种保证一个类只有一个实例的模式,它可以避免多个实例造成的资源浪费和对象的不一致性。单例模式通常使用一个私有的构造函数和一个静态的实例变量来实现。

  1. 建造者模式(Builder Pattern)

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式可以将复杂对象的构建过程抽象出来,从而使得系统更加灵活。

  1. 原型模式(Prototype Pattern)

用原型实例指定创建对象的种类,并通过复制这些原型创建新的对象。原型模式可以在运行时动态地创建对象,从而避免了静态工厂方法所带来的编译时耦合。

结构型模式

  1. 适配器模式(Adapter Pattern)

适配器模式是一种将一个类的接口转换成客户端所期望的另一种接口的模式,它可以让原本不兼容的类能够协同工作。这种模式可以避免因接口不匹配而导致的代码重构和重复开发。

  1. 装饰器模式(Decorator Pattern)

装饰器模式是一种在运行时动态地给对象添加新的功能的模式,它通过将对象包装在一个装饰器中来实现。这种模式可以避免使用继承带来的复杂性和静态特性,提高代码的灵活性和可扩展性。

  1. 代理模式(Proxy Pattern)

代理模式是一种结构型设计模式,它允许我们创建一个代理对象来控制对另一个对象的访问。代理对象可以充当原始对象的访问接口,从而控制对原始对象的访问。代理模式通常用于远程访问、延迟加载、访问控制等方面。

  1. 外观模式(Facade Pattern)

为一组复杂的子系统提供一个简单的接口,从而隐藏子系统的复杂性。外观模式可以降低客户端和子系统之间的耦合度,同时提高客户端的易用性。

  1. 桥接模式(Bridge Pattern)

桥接模式是一种将抽象部分与它的实现部分分离开来的模式,使它们可以独立地变化。这种模式可以避免因为实现细节的变化而导致的代码修改和重构。

  1. 组合模式(Composite Pattern)

组合模式是一种将对象组合成树形结构的模式,使得客户端可以像处理单个对象一样处理对象的组合。这种模式可以使得对象之间的关系更加清晰,提高代码的可读性和可维护性。

  1. 享元模式(Flyweight Pattern)

享元模式是一种结构型设计模式,用于优化对象的创建和使用。该模式通过共享相同的数据,来减少内存的使用和对象的创建。通常情况下,享元模式适用于存在大量相似对象的情况

行为型模式

  1. 观察者模式(Observer Pattern)

观察者模式是一种对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都会收到通知并自动更新。这种模式可以降低对象之间的耦合度,提高系统的灵活性和可扩展性。

  1. 策略模式(Strategy Pattern)

策略模式是一种定义一系列算法的模式,它将每个算法封装在一个类中,并使它们可以互相替换。这种模式可以避免使用大量的条件语句和重复代码,提高代码的可维护性和可扩展性。

  1. 迭代器模式(Iterator Pattern)

迭代器模式是一种访问一个聚合对象中的各个元素的方式,而又不需要暴露该对象的内部表示。这种模式可以让客户端透明地访问聚合对象中的元素,同时避免了聚合对象的数据结构对客户端的依赖。

  1. 命令模式(Command Pattern)

将请求封装成对象,从而使不同的请求可以被不同的对象处理。命令模式可以将请求的发送者和接收者解耦,同时支持请求的撤销和重做

  1. 责任链模式(Chain of Responsibility Pattern)

将请求的发送者和接收者解耦,通过一条由多个处理对象组成的链来处理请求。责任链模式可以根据需求动态地组合处理对象,从而实现请求的自动转发和处理。

  1. 模板方法模式(Template Method Pattern)

定义一个操作中的算法骨架,将一些步骤延迟到子类中。模板方法模式可以提高代码的复用性和可维护性,同时可以避免子类中的代码重复

  1. 状态模式(State Pattern)

允许对象在内部状态发生改变时改变它的行为。状态模式将对象的行为和状态进行分离,从而将复杂的条件判断转化为简单的状态切换。

  1. 中介者模式(Mediator Pattern)

用一个中介对象来封装一系列的对象交互,从而使对象之间的交互松散耦合。中介者模式可以简化对象之间的交互,同时降低对象之间的依赖关系。

  1. 解释器模式(Interpreter Pattern)

给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。解释器模式可以将复杂的语言转化为易于处理的数据结构,从而使得语言的解释更加容易。

  1. 访问者模式(Visitor Pattern)

访问者模式是一种行为设计模式,它可以让你将算法与它们操作的对象分离。这样,你可以在不修改对象结构的情况下,向现有的对象结构添加新的操作。

  1. 备忘录模式(Memento Pattern)
    备忘录模式是一种行为型设计模式,它允许我们将对象的状态保存在备忘录对象中,从而可以在以后恢复对象的状态。该模式通常用于需要撤销、恢复操作的场景,例如文本编辑器、绘图应用等。备忘录模式通过将状态保存在备忘录对象中来实现状态的恢复,从而保证了对象的封装性和数据安全性。

参考资料

https://dofactory.com/net/abstract-factory-design-pattern

https://refactoring.guru/design-patterns

内容
  • RocketMQ消费者是如何负载均衡的
    RocketMQ消费者是如何负载
    2023-12-09
    摘要:RocketMQ 支持两种消息模式:集群消费( Clustering )和广播消费( Broadcasting )
  • 复现YOLO5所遇到的问题
    复现YOLO5所遇到的问题
    2023-12-08
    ****一、.解决方案:.由于没有影响模型继续运行,理解为简单的warning。根据查询问题,推断是由于 pytorch
  • 线上服务器磁盘爆了,如何快速处理?
    线上服务器磁盘爆了,如何快速处理
    2023-12-08
    分享技术,用心生活.有一天突然收到预警短信,显示是服务器磁盘占用100% 心里一想这事大了,得赶紧处理啊!深一吸口气默念
  • JavaScript Alert函数执行顺序问题
    JavaScript Alert
    2023-12-07
    分析 解决这个问题之前先了解一下它是怎么导致的,而要了解它需要从 JavaScript 的线程模型说起..JavaScr
  • 架构师日记-如何写的一手好代码
    架构师日记-如何写的一手好代码
    2023-12-06
    作者:京东零售 刘慧卿.一 前言.在日常工作中,我经常听到部分同学抱怨代码质量问题,潜台词是:“除了自己的代码,其他人写
  • FlashDuty Changelog 2023-09-07 | 新增深色模式与主题配置
    FlashDuty Change
    2023-12-04
    FlashDuty:一站式告警响应平台,前往此地址免费体验!.FlashDuty.现在已经全面支持了深色模式,这为您提供
  • PnP and Perspective Projection and Pose Computation
    PnP and Perspect
    2023-12-03
    PnP and Perspective Projection and Pose Computation.Review P
  • 万字好文:大报文问题实战
    万字好文:大报文问题实战
    2023-12-02
    导读.大报文问题,在京东物流内较少出现,但每次出现往往是大事故,甚至导致上下游多个系统故障。大报文的背后,是不同商家业务
  • Shader Coding 之 特效越跑越慢
    Shader Coding 之 
    2023-12-02
    Shader 特效越跑越慢问题的排查.问题.某屏幕特效 shader 逻辑是呈现自上而下或自左而右的扫描线效果,其核心.
  • 最小二乘法,极大似然估计,交叉熵的公式推导
    最小二乘法,极大似然估计,交叉熵
    2023-12-01
    最小二乘法、极大似然估计和交叉熵是常用的三种损失函数。.最小二乘法是一种回归问题中常用的损失函数,用于衡量预测值与实际值
  • 时尚太阳镜
    时尚太阳镜
    2024-01-20
    时尚太阳镜.时尚太阳镜一直以来都是每个夏天必不可少的时尚单品,不仅可以为我们的装扮增添亮点,更能够有效保护我们的眼睛。无
  • 商务休闲领带
    商务休闲领带
    2023-12-31
    商务休闲领带:展现不同的风格.商务休闲领带是男士着装中非常重要的一部分,它不仅可以完美搭配西装,展现出商务精英的睿智和稳
  • 时尚皮质外套,展现酷帅摩登魅力
    时尚皮质外套,展现酷帅摩登魅力
    2024-01-05
    时尚皮质外套,展现酷帅摩登魅力.时尚和酷帅并不矛盾,皮质外套正是展现这种摩登魅力的最佳选择。无论是潮流的时尚圈还是街头的
  • 时尚商务西服套装
    时尚商务西服套装
    2023-12-16
    时尚商务西服套装.时尚商务西服套装一直是职场男士们必备的时尚单品之一。无论是商务会议、重要场合还是日常办公,一套精致的商
  • 修身弹力牛仔裤
    修身弹力牛仔裤
    2023-12-26
    修身弹力牛仔裤:展现你的魅力.一、时尚的必备单品.修身弹力牛仔裤一直都是时尚界的必备单品,它不仅可以展现出个人的魅力,还
  • 暖心家居服套装,柔软舒适,可爱**形象,让宝宝安心入睡
    暖心家居服套装,柔软舒适,可爱*
    2023-12-16
    暖心家居服套装,让宝宝安心入睡.宝宝的睡眠质量对成长发育至关重要,而穿着舒适的家居服对宝宝的睡眠质量有着直接的影响。为了
  • 时尚牛仔裤,展现随性休闲风格
    时尚牛仔裤,展现随性休闲风格
    2024-01-10
    时尚牛仔裤,展现随性休闲风格.时尚牛仔裤一直是时装界的宠儿,它不仅兼具舒适与时尚,更能展现出一种随性的休闲风格。无论是搭
  • 时尚潮流运动鞋
    时尚潮流运动鞋
    2024-01-15
    时尚潮流运动鞋.时尚潮流运动鞋一直是年轻人喜爱的时尚单品,它不仅舒适耐穿,更是一种个性的象征。随着时尚潮流不断更新,运动
  • 时尚个性针织毛衣
    时尚个性针织毛衣
    2023-12-11
    时尚个性针织毛衣.时尚个性针织毛衣一直是秋冬季节的必备单品,不仅可以很好地保暖,还能展现出个性与时尚。无论是女性还是男性
  • 可爱儿童卫衣套装,保暖舒适,时尚设计,宝宝的最爱
    可爱儿童卫衣套装,保暖舒适,时尚
    2023-12-11
    可爱儿童卫衣套装,宝宝的最爱.儿童是上帝赐予的天使,他们天*可爱的笑容总能给人带来无尽的快乐。为了让他们在冬季也能保持温