zoukankan      html  css  js  c++  java
  • 18 pyhon学习笔记-设计模式之单例模式

    “设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。”

    一、设计模式

    1.设计模式的定义:
    为了解决面向对象系统中重要和重复的设计封装在一起的一种代码实现框架,可以使得代码更加易于扩展和调用。
    
    2.设计模式的分类:
    设计模式可以分为三个大类:创建类设计模式、结构类设计模式、行为类设计模式。创建类设计模式可以分为单例模式、工厂模式、抽象工厂模式、原型模式、建造者模式;结构类设计模式可以分为装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式;行为类设计模式可以细分为策略模式、责任链模式、命令模式、中介者模式、模板模式、迭代器模式、访问者模式、观察者模式、解释器模式、备忘录模式、状态模式。
    什么是设计模式

     本文主要介绍单例模式及其在自动化测试中的运用场景

     二、单例模式

     1. 单例模式定义

     单例模式是指:保证一个类仅有一个实例,并提供一个访问它的全局访问点,说直白一点就是一个类不管实例化多少次就只有一个实例。例如,我们打开腾讯播放软件,不管你打开几次,

    窗口只有这一个播放软件,多开几个视频也不能同时播放只能播放一个视频。这里用的就是是单例设计模式,这个播放软件仅有一个实例。

    2. 单例模式的设计思路

     类是通过类里面的一个内置函数__new__来进行实例化操作的,它在__init__之前先执行。单例模式中类的实例化,也需要用到类里面的这个内置函数__new__。

     单例模式的设计思路:就是先判断一下这个类有没有被实例化过,如果实例化过了,那我们就不要调用继续实例化了,返回原来的那个实例,如果没有被实例化才继续实例化。

    示例1. 先写一个普通的类,看一下实例化之后的内存地址。从下图可以看到,正常的一个类,实例化两次得到的对象,内存地址是不一样的,不是同一个对象

     

    示例2. 再写一个单例模式的类,可以看到,实例化两次得到的对象,内存地址是一样的,是一个对象。即单例模式,不管实例化多少次就只有一个实例

    注:重写__new__这个方法,如果想实例化必须调用一个父类的__new__(cls)方法,要不然不能实例化

    示例3. 单例模式在测试设计中连接数据库时的应用

    在执行测试代码时,我们需要连接数据库生成测试数据或获取数据跟测试结果进行对比。若每执行一条用例连接数据库都创建一个新实例则会造成资源浪费,实际上用单例模式设计,我们不管连接多少次数据库,都只生成一个实例对象。

    3.  单例模式的优缺点和应用

    单例模式的优点:

    • 1、由于单例模式要求在全局内只有一个实例,因而可以节省比较多的内存空间;
    • 2、全局只有一个接入点,可以更好地进行数据同步控制,避免多重占用;
    • 3、单例可长驻内存,减少系统开销。

    单例模式的缺点

    • 1、单例模式的扩展是比较困难的;
    • 2、赋于了单例以太多的职责,某种程度上违反单一职责原则;
    • 3、单例模式是并发协作软件模块中需要最先完成的,因而其不利于测试;
    • 4、单例模式在某种情况下会导致“资源瓶颈”。

    单例模式的应用举例:

    • 1、生成全局惟一的序列号;
    • 2、访问全局复用的惟一资源,如登录的token、回收站等;
    • 3、单个对象占用的资源过多,如数据库等;
  • 相关阅读:
    vue源码分析—Vue.js 源码目录设计
    vue源码分析—认识 Flow
    在Windows上安装配置MongoDB
    mongoDB概述
    Could not load file or assembly Microsoft.Web.Infrastructure
    配置错误 不能在此路径中使用此配置节(转)
    VS2013快捷键大全
    Create new tool for CSV
    How to get http response.
    C#中Split用法
  • 原文地址:https://www.cnblogs.com/cocomoly/p/12059772.html
Copyright © 2011-2022 走看看