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 数据库操作程序
    等等。

单例模式参考代码。

class Singleton(object):def __new__(cls, *args, **kwargs):if not hasattr(cls, "instance"):cls.instance = super().__new__(cls)return cls.instances = Singleton()
print("Object created", s)s1 = Singleton()
print("Object created", s1)

运行结果

往期精彩回顾适合初学者入门人工智能的路线及资料下载(图文+视频)机器学习入门系列下载中国大学慕课《机器学习》(黄海广主讲)机器学习及深度学习笔记等资料打印《统计学习方法》的代码复现专辑
AI基础下载机器学习交流qq群955171419,加入微信群请扫码:

【Python】Python语言学习:设计模式、单例模式相关推荐

  1. python为语言的设计模式

    摘录自 http://www.cnblogs.com/wuyuegb2312/archive/2013/04/09/3008320.html 一.简单工厂模式 模式特点:工厂根据条件产生不同功能的类. ...

  2. C语言之设计模式——单例模式

      单例模式是最简单的设计模式之一,顾名思义,整个系统中每个结构体只有一个实例存在,不能再多,否则就不叫单例.单例模式只应在有真正的"单一实例"的需求时才可使用.   场景:tim ...

  3. python:水果与设计模式-原型模式

    原型模式(Prototype Pattern):属于创建型模式,它提供了一种创建对象的最佳方式.这种模式实现了一个原型接口,该接口用于创建当前对象的克隆.当直接创建对象的代价比较大时,则采用这种模式. ...

  4. 【三万粉丝终极福利】Python、C、Java三大语言学习路线和资源整理

    大家好,我是辣条. 今天给大家带来三万粉丝三大语言学习路线和资源整理,收藏就对了. 目录 C语言 学习路线 学习书籍 学习视频 资源推荐 Java语言 学习路线 学习书籍 学习视频 资源推荐 Pyth ...

  5. Python设计模式-单例模式

    Python设计模式-单例模式 基于Python3.5.2,代码如下 #coding:utf-8 import threading import timeclass Singleton(object) ...

  6. python与c语言在语法上的区别-C语言和Python编程先学习哪个

    原标题:C语言和Python编程先学习哪个 初学者,Python和C语言先学哪个好? 就像是"先有鸡还是先有蛋一样",先学python还是先学C语言,这也是个世纪难题. 这种纠结并 ...

  7. 怎么自学python语言-python应用:零基础Python应该怎样学习呢?

    Python应该怎样学习呢?Python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立 ...

  8. 如何用Python一门语言通吃高性能并发、GPU计算和深度学习

    [CTO讲堂]如何用Python一门语言通吃高性能并发.GPU计算和深度学习 发表于2016-01-04 15:11| 4374次阅读| 来源CSDN| 4 条评论| 作者蒲婧 CTO俱乐部CTOCT ...

  9. Python语言学习:python语言代码调试—异常处理之详细攻略

    Python语言学习:python语言代码调试-异常处理之详细攻略 目录 python语言代码调试-异常处理 异常捕捉可以使用 try/except 语句 相关文章 Python3 错误和异常 | 菜 ...

最新文章

  1. x86汇编语言从实模式百度云_Intel x86 CPU 32位保护模式杂谈之任务切换 上
  2. 干货丨从概念到实践,我们该如何构建自动微分库
  3. TCP/UDP网络编程调试助手下载
  4. 如何搞定SVN目录的cleanup问题和lock问题
  5. dll侧加载_win7系统开机提示xxxdll模块已加载但找不到入口点的解决方法
  6. 基于最简单的FFmpeg包封过程:视频和音频分配器启动(demuxer-simple)
  7. javashop配置微信支付
  8. HDR色调映射(一):基础概念
  9. matlab作图有拉盖尔,拉盖尔高斯光束matlab
  10. idea破解码生成地址
  11. 中国半导体仍然弱小 产业生态体系亟需完善
  12. Python3 - DBUtils 和 pymysql 整合
  13. FPGA跨时钟域打两拍和三拍问题
  14. MER 音乐情感识别-论文笔记6
  15. 爱普生Epson Stylus SX235W 一体机驱动
  16. 苹果屏和android屏哪个更真实,同是LCD屏,为什么iPhone的实际体验比安卓好许多...
  17. Linux实战001:VMware下安装Ubuntu18.04(服务器版)
  18. JAVA反射----->看这篇就够了
  19. Rufus 制作U盘启动
  20. (求老师啊,求同伴啊)php 生命数字密码设计第一步:数据库基本连接

热门文章

  1. jquery 如何保存拖动空间的位置
  2. eclipse maven 创建总POM 工程
  3. SEO优化之一步一步诊断网站
  4. CISSP的成长之路(七):复习信息安全管理(1)
  5. linux的管道 |和grep命令以及一些其他命令(diff,echo,cat,date,time,wc,which,whereis,gzip,zcat,unzip,sort)...
  6. 插入排序法算长度为10的数组
  7. 2017年值得回首的那些事(文末有新春好礼相送)
  8. 如何实现分类表统计数目和详情表数量同步
  9. VC++6.0中不兼容问题
  10. 基于.NET实现数据挖掘--线性回归算法