前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python语言学习:设计模式、单例模式

Python语言学习:设计模式、单例模式

作者头像
陆勤_数据人网
发布2022-03-29 08:36:13
3520
发布2022-03-29 08:36:13
举报

2022年第04周。 这一周Python语言学习,记录如下。

01设计模式

1.1 设计模式简介

设计模式是解决特定问题的解决方案

设计模式的优点

  • 1 可以在多个项目重复使用。
  • 2 问题可以在架构级别来解决。
  • 3 经过了时间的验证和良好的证明,是开发人员和架构师的宝贵经验。
  • 4 具有可靠性和依赖性。

为了更好地认识设计模式,我们先理解这些术语。

  • 1 代码段:用某种语言编写的一段具有特定用途的代码。例如,Python语言链接数据库的代码段。
  • 2 设计:用来解决特定问题的优秀解决方案。
  • 3 标准:一种解决某类问题的方法,非常通用,并且适用于当前的情况。
  • 4 模式:一个经过时间考验的、高效、可扩展的解决方案,能够解决一类已知问题。

1.2 设计模式分类

GoF在他们的设计模式书籍《Design Patterns: Elements of Reusable Object-Oriented Software》中讲到了23种设计模式,分为三类。

  • 1 创建型模式
  • 2 结构型模式
  • 3 行为型模式

模式的分类主要基于对象的创建、软件应用程序中类和对象的构造方式,还涉及对象之间的交互方式。

创建型模式的性质。

  • 1 它们的运行机制基于对象的创建方式。
  • 2 它们将对象创建的细节隔离开来。
  • 3 代码与所创建的对象类型无关。 单例模式就是创建型模式的一个例子。

结构型模式的性质。

  • 1 致力于设计出通过组合获得更强大功能的对象和类的结构。
  • 2 重点是简化结构并识别类和对象之间的关系。
  • 3 它们主要关注类的继承和组合。 适配器模式就是结构型模式的一个例子。

行为型模式的性质。

  • 1 关注对象之间的交互以及对象的响应性。
  • 2 对象应该能够交互,同时仍然保持松散耦合。

设计模式的学习和理解,需要我们对面向对象编程OOP有一定的认识。 Python语言学习:面向对象编程,这篇文章介绍OOP的基本知识。

1.3 面向对象设计原则

面向对象设计原则,有利于我们深入学习和理解设计模式。遵循和应用好这些原则,可以让我们软件架构、设计和实现更健壮、稳定、灵活、强大。

1 开放/封闭原则

开放/封闭原则,类和对象及其方法对于扩展来说,是开放的;对于修改来说,是要封闭的。 这个原则的优点。

  • 1 现有的类不会被修改,因此退化的可能性较小。
  • 2 有助于保持以前代码的向后兼容性。
2 控制反转原则

控制反转原则,高层级的模块不应该依赖于低层级的模块,它们应该依赖于抽象。任何两个模块都不应以紧密的方式相互依赖。 这个原则的优点。

  • 1 消弱了模块间的紧耦合,因此消除了系统中的复杂性。
  • 2 由于依赖模块之间有一个明确的抽象层(由钩子或参数提供),因此便于通过更好的方式处理模块之间的依赖关系。
3 接口隔离原则

接口隔离原则,客户端不应该依赖于它们不需要使用的接口。 这个原则的优点。

  • 1 它强制开发人员编写瘦身型接口,并使方法与接口紧密无关。
  • 2 防止向接口中随意填写方法。
4 单一职责原则

单一职责原则,类的职责单一,引起类变化的原因单一。 这个原则的优点。

  • 1 每当一个功能发生变化时,除了特定类需要改变外,其他类无需变动。
  • 2 如果一个类有多种功能,那么依赖它的类必定会由于多种原因而经历多次修改,这是应该避免的。
5 替换原则

替换原则,派生类必须能够完全取代基类。

02单例设计模式

单例设计模式是最简单和最著名的一种创建型设计模式

单例设计模式意图

  • 1 确保类有且只有一个对象被创建。
  • 2 为对象提供一个访问点,以使程序可以全局访问对象。
  • 3 控制共享资源的并行访问。

单例设计模式应用场景

  • 1 打印机后台处理程序
  • 2 数据库操作程序 等等。

单例模式参考代码。

代码语言:javascript
复制
class Singleton(object):

    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, "instance"):
            cls.instance = super().__new__(cls)
        return cls.instance


s = Singleton()
print("Object created", s)

s1 = Singleton()
print("Object created", s1)

运行结果

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据科学与人工智能 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 01设计模式
    • 1.1 设计模式简介
      • 1.2 设计模式分类
        • 1.3 面向对象设计原则
        • 02单例设计模式
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档