首页 > 其他分享 >设计模式实现思路介绍

设计模式实现思路介绍

时间:2024-07-04 16:02:50浏览次数:14  
标签:上下文 对象 接口 模式 实现 介绍 思路 设计模式

设计模式是在软件工程中用于解决特定问题的典型解决方案。它们是在多年的软件开发实践中总结出来的,并且因其重用性、通用性和高效性而被广泛接受。设计模式通常被分为三种主要类型:创建型、结构型和行为型。


创建型设计模式

创建型设计模式专注于如何创建对象,以确保系统在创建对象时保持灵活性和可扩展性。

  1. 单例模式 (Singleton)

    • 思路:确保类只有一个实例,并提供一个全局访问点。
    • 实现:隐藏构造函数,使用静态方法返回唯一实例。
  2. 工厂方法模式 (Factory Method)

    • 思路:定义一个用于创建对象的接口,让子类决定实例化哪个类。
    • 实现:创建一个抽象方法,由子类实现具体对象的创建。
  3. 抽象工厂模式 (Abstract Factory)

    • 思路:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
    • 实现:定义一个接口用于创建相关的对象家族,具体工厂类实现这个接口。
  4. 建造者模式 (Builder)

    • 思路:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
    • 实现:定义一个Builder接口,用于逐步构建复杂对象的各个部分。
  5. 原型模式 (Prototype)

    • 思路:使用已创建的对象作为原型,通过复制这个原型来创建新的对象。
    • 实现:实现克隆(复制)方法,返回对象的一个副本。

结构型设计模式

结构型设计模式处理对象的组合,通常用于实现更大的结构,同时简化结构或提高结构的灵活性。

  1. 适配器模式 (Adapter)

    • 思路:将一个类的接口转换成客户期望的另一个接口。
    • 实现:通过包装一个已存在的类,提供不同的接口。
  2. 桥接模式 (Bridge)

    • 思路:将抽象部分与实现部分分离,使它们可以独立变化。
    • 实现:定义一个抽象类持有一个对实现类的引用,并通过这个引用来调用实现具体行为。
  3. 组合模式 (Composite)

    • 思路:将对象组合成树形结构以表示部分-整体的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
    • 实现:定义一个包含子部件的组合类,和表示叶节点的类,它们实现相同的接口。
  4. 装饰器模式 (Decorator)

    • 思路:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式比生成子类更为灵活。
    • 实现:定义装饰类,它包装主类,并在保持主类接口不变的情况下,提供额外的功能。
  5. 外观模式 (Facade)

    • 思路:提供一个统一的接口,用来访问子系统中的一群接口,从而使得子系统更容易使用。
    • 实现:定义一个高层接口,它使得子系统更易于使用。
  6. 享元模式 (Flyweight)

    • 思路:运用共享技术有效地支持大量细粒度的对象。这样可以减少对象的数量,从而减少内存占用和提高性能。
    • 实现:创建一个享元工厂,用于管理共享对象的创建和缓存。确保相同的对象不会被重复创建。
  7. 代理模式 (Proxy)

    • 思路:提供一个替代品或占位符来控制对原对象的访问。代理可以控制对原对象的访问,并允许在将请求传递给原始对象之前或之后进行额外的操作。
    • 实现:定义一个代理类,与原始对象实现相同的接口,并在内部持有原始对象的引用。代理类可以在转发调用前后执行额外的逻辑。

行为型设计模式

行为型设计模式关注对象之间的责任分配。它们处理对象之间的通信,并在对象之间建立清晰的消息传递路径。

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

    • 思路:创建对象链,每个对象依次有机会处理请求。如果当前对象无法处理,则它会将请求传递给链上的下一个对象。
    • 实现:定义一个处理请求的接口,并在每个处理类中持有下一个处理对象的引用。请求沿着链传递,直到被处理。
  2. 命令模式 (Command)

    • 思路:将请求封装成对象,从而让你使用不同的请求、队列或日志请求来参数化其他对象。命令模式也支持可撤销的操作。
    • 实现:定义一个命令接口,具体命令实现该接口。调用者持有命令对象,并在适当的时刻执行命令。
  3. 解释器模式 (Interpreter)

    • 思路:给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。
    • 实现:创建抽象表达式类,具体表达式类实现此接口来解释目标语言。
  4. 迭代器模式 (Iterator)

    • 思路:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
    • 实现:定义迭代器接口,并实现具体迭代器,用于对聚合对象进行遍历。
  5. 中介者模式 (Mediator)

    • 思路:定义一个封装一组对象如何交互的对象。通过使对象明确地不相互引用,并将它们的交互委托给中介者对象,来减少多个对象之间的依赖关系。
    • 实现:创建中介者对象,它通常持有各个对象的引用,并协调它们之间的交互。
  6. 备忘录模式 (Memento)

    • 思路:在不破坏封装性的前提下,捕获并保存一个对象的内部状态,以便在将来可以将对象恢复到这个状态。
    • 实现:创建备忘录对象来存储主要对象的状态,并通过一个管理者来管理备忘录对象。
  7. 观察者模式 (Observer)

    • 思路:定义对象间的一种一对多的依赖关系,以便当一个对象改变状态时,所有依赖于它的对象都会得到通知并自动更新。
    • 实现:实现一个主题接口,包含注册、注销和通知观察者的方法。观察者实现一个观察者接口,包含更新方法。当主题状态改变时,通过调用观察者的更新方法来通知所有注册的观察者。
  8. 状态模式 (State)

    • 思路:允许一个对象在其内部状态改变时改变它的行为,对象看起来好像修改了它的类。
    • 实现:定义状态接口,并为每个具体状态实现该接口。上下文对象根据内部状态的变化切换状态对象,从而改变其行为。
  9. 策略模式 (Strategy)

    • 思路:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。策略模式让算法独立于使用它的客户而变化。
    • 实现:定义一个策略接口,具体策略类实现这个接口。上下文类持有一个策略对象,客户端可以设置使用哪个策略。
  10. 模板方法模式 (Template Method)

    • 思路:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下重新定义算法中的某些步骤。
    • 实现:定义一个抽象类,其中包含一个模板方法和一系列抽象方法或钩子方法。子类实现这些方法,模板方法则定义了算法的步骤。
  11. 访问者模式 (Visitor)

    • 思路:表示一个作用于某对象结构中的各元素的操作。访问者模式使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
    • 实现:定义一个访问者接口,具体访问者实现这个接口。元素类接受一个访问者对象,并通过调用访问者的访问方法来执行操作。

行为型设计模式通常涉及到算法和对象间的职责分配。这些模式不仅考虑对象本身,还考虑它们之间的交互,以及如何封装并隐藏这些交互的复杂性。


上下文对象模式

这个模式通常是指在程序的不同部分传递包含状态信息的对象。这个上下文对象封装了与请求相关的数据,以避免在方法调用中传递大量参数,或者是为了保持状态以跨多个方法调用。它是一种通过对象来共享数据的方式,使得你可以在程序的不同部分访问和修改这些数据。

在一些框架和库中,上下文对象模式被广泛使用,例如在web开发框架中,请求和响应对象就是上下文对象的实例,它们封装了HTTP请求和响应的所有数据。

与上下文对象模式组合使用的设计模式

上下文对象模式可以与多种设计模式组合使用,具体取决于你的设计需求,例如:

  1. 策略模式(Strategy Pattern): 上下文对象可以保存一个引用到策略对象,并在运行时根据需要切换策略。

  2. 状态模式(State Pattern): 上下文对象可以保存状态,并在其状态改变时改变其行为。

  3. 命令模式(Command Pattern): 上下文对象可以作为命令的一部分,封装所有必要的信息以执行命令。

  4. 观察者模式(Observer Pattern): 上下文对象可以通知一系列观察者对象关于其状态的变化。

  5. 单例模式(Singleton Pattern): 上下文对象本身可能被实现为单例,尤其是在应用全局状态时。

上下文管理器模式

另一个相关的概念是“上下文管理器”模式,这个模式在Python中非常常见,尤其是使用with语句来管理资源的情况。上下文管理器模式确保资源的分配和释放过程是干净的,即使在发生异常时也能保证资源的正确释放。

上下文管理器的例子:

# 使用上下文管理器管理文件资源
with open('file.txt', 'w') as file:
    file.write('Hello, World!')
# 文件在这个块结束时自动关闭

上下文管理器通常和工厂模式(Factory Pattern)结合使用,工厂负责创建对象,而上下文管理器负责管理对象的生命周期。在Python中,上下文管理器模式是一种特殊的应用方式,它使用with语句来简化资源管理。

综上所述,上下文设计模式指的是一种在程序中传递状态信息的模式,它可以与多种设计模式组合使用,具体取决于你的设计和需求。设计模式不是可以直接复制粘贴到你的代码中的解决方案,而是用于解决特定上下文中的常见问题的模板。在实际应用中,根据具体情况调整和组合这些模式是非常常见的。

学习资源

标签:上下文,对象,接口,模式,实现,介绍,思路,设计模式
From: https://blog.csdn.net/sinat_41883985/article/details/140180214

相关文章

  • 自动测试脚本----项目文件结构介绍(common,Data,Log,Case)
    一、总体框架介绍我们先看一下一般项目的总体结构: Automation:项目工程文件Common:存放一些封装的公共函数,可在已添加的py文件中追加函数和类,也可新增py文件和包来新增公共函数。新增包时请注意不要新增文件夹,新增文件夹的话,在文件夹下新增的py文件无法import,能impor......
  • 关于Android Q平台上qssi的介绍
    QSSI是QualcommSingleSystemImage的缩写。AndroidQ上开始支持QSSI。QSSI是用来编译system.img的3.1QSSI编译注意事项lunchqssi------编译system.imglunchtarget------编译其余的image3.2有QSSI和没有QSSI的编译流程对比没有QSSIsourcebuild/envse......
  • selenium14_POM设计模式
    Python+Selenium+Unittest+Git+Jenkins框架,POM设计模式1.common文件夹:二次封装原有方法的文件base.py;存放通过的文件,如:生成报告的文件2.pages文件夹:page元素的定位;调用前边的封装方法,或者继承,再次封装一些页面的操作方法:如输入用户名密码点击登陆等操作。(或者元素定位,操作......
  • [JLU] 数据结构与算法上机题解思路分享-
    前言首先,请务必自己尽全力尝试实现题目,直接看成品代码,思维就被拘束了,也很容易被查重。这里只是思路解析的博客,代码仓库在JLU_Data_Structures_Record希望你能在这里找到你想要的:)第三次上机A手撕BST分数50作者朱允刚单位吉林大学对一棵初始为空的二叉查找树(Binary......
  • 关于古书介绍上“单鱼尾”是什么?
    在阅读一些古书时,读的往往时某些版本的综合刊定版,而介绍有关原版时,会出现这个词语“单鱼尾”或者双鱼尾,这是什么意思呢?搜索发现,原来古书也不是一页页,单页的,而是双页印刷,然后中间折叠,装订成册的。而折叠的具体位置在哪呢?就由鱼尾型标志标明,显然鱼尾最凹处就是折叠的位置。相关介绍......
  • 代码审计连载-工具介绍及简单思路
    相信很多刚入门的朋友来讲,php代码审计很陌生,很多网友喜欢直接扔seay等自动化工具,这方法也算是一种最快的一种审计方式。之前看w师傅的一篇文章,开始部分说了一段话”对于面向过程写法的程序来说,最快的审计方法可能时直接丢seay审计系统里,但对于基于mvc模式的程序来......
  • java设计模式(十二)享元模式(Flyweight Pattern)
    1、模式介绍:        享元模式是一种结构型设计模式,旨在通过共享对象来有效支持大量细粒度的对象。它通过将对象的状态分为内部状态(可共享)和外部状态(不可共享)来减少内存消耗和提高性能。内部状态存储在享元对象内部,而外部状态则由客户端代码管理和传递。2、应用场景:......
  • [JLU] 数据结构与算法上机题解思路分享-课程设计第一次与第二次上机
    前言首先,请务必自己尽全力尝试实现题目,直接看成品代码,思维就被拘束了,也很容易被查重。这里只是思路解析的博客,代码仓库在JLU_Data_Structures_Record希望你能在这里找到你想要的:)第一次上机A网络布线分数50作者朱允刚单位吉林大学2024年亚洲杯足球赛刚刚落下帷幕,......
  • 【重走编程路】设计模式概述(三) -- 单例模式
    文章目录前言设计模式详解3.单例模式(Singleton)问题解决方案应用场景实现代码1.懒汉式单例模式2.加锁的懒汉式单例模式3.饿汉式单例模式4.静态内部变量(c++11)5.call_once实现懒汉单例前言创建型模式主要关注对象的创建过程,提供了一种创建对象的最佳方式,并隐......
  • 模拟集成电路设计系列博客——8.4.1 全数字锁相环介绍
    8.4.1全数字锁相环介绍随着CMOS工艺的演进,数字电路的尺寸得到不断的微缩,工作电压不断的降低,这使得模拟PLL受到了许多挑战,如环路滤波器中无源器件尺寸庞大,即使在更先进的CMOS工艺下也无法缩小,如果改为片外器件又会引入额外噪声,并增加pad需求和PCB面积,如下图所示,一个典型的模拟PLL......