1)设计模式:

是前人工作的总结和提炼。通常,被人们广泛流传的设计模式。

    某一问题的特定解决方案,使用设计模式是为了可重用代码,是代码更容易被人理解, 增加代码的可用性。

2)单例设计模式:

python解释器在执行对象的创建的时候,具体执行的操作为:为对象分配内存空间、为对象初始化。

# 实例:实现多个对象创建相同的内存空间

class  MusicPlayer(object):

    instance  =  None         # 设置类属性,用来判断是否有对象得到内存空间

    # 使用内置函数进行空间的分配

    def  __new__(cls,*args,**kwargs):

         # cls:哪个类调用,就传递哪个类;*args:元组参数;**kwargs:字典参数

         # 为对象分配内存

         if  cls.instance  ==  None:       # 空的时候,分配空间

               cls.instance  =  object.__new__(cls)

         return  cls.instance   

    def  __init__(self):

         print  "初使化播放器"

# 创建播放器对象

player1  =  MusicPlayer()

print  player1

player2  =  MusicPlayer()

print  palyer2

# 注释:此时,对象player1和player2返回的内存地址是相同的

3)单例模式的扩展:

# 实例:实现多个对象分配空间,只分配一次;只初始化一次

class  MusicPlayer(object):

    instance  =  None         # 设置类属性,用来判断是否有对象得到内存空间

    init_flag  =  0           # 0表示还没有初始化;1代表已经初始化

    # 使用内置函数进行空间的分配

    def  __new__(cls,*args,**kwargs):

         # cls:哪个类调用,就传递哪个类;*args:元组参数;**kwargs:字典参数

         # 为对象分配内存

         if  cls.instance  ==  None:       # 空的时候,分配空间

               cls.instance  =  object.__new__(cls)

         return  cls.instance   

         # 把解释器的到的分配了空间的对象的引用,给对象的初始化方法

    def  __init__(self):

         if  MusicPlayer.init_flag  == 0: 

               print  "初使化播放器"

               MusicPlayer.init_flag  =  1

         else:

               return        # 当已经初始化后,再执行就直接返回

# 创建播放器对象

player1  =  MusicPlayer()

print  player1

player2  =  MusicPlayer()

print  palyer2

# 注释:此时的两个对象,具有相同的内存地址,且只实例化了一次

Python中的单例设计模式的更多相关文章

  1. Python中的单例设计

    01. 单例设计模式 设计模式 设计模式 是 前人工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对 某一特定问题 的成熟的解决方案 使用 设计模式 是为了可重用代码.让代码更容易被他人理解.保 ...

  2. OC中的单例设计模式及单例的宏抽取

    // 在一个对象需要重复使用,并且很频繁时,可以对对象使用单例设计模式 // 单例的设计其实就是多alloc内部的allocWithZone下手,重写该方法 #pragma Person.h文件 #i ...

  3. iOS 中的单例设计模式

    单例设计模式:在它的核心结构中只包含一个被称为单例类的特殊类.例如文件管理中的NSUserDefault,应用程序中的UIApplication,整个应用程序就这一个单例类,负责应用程序的一些操作,单 ...

  4. IOS中的单例设计模式

    单例设计模式是IOS开发中一种很重要很常用的一种设计模式.它的设计原理是无论请求多少次,始终返回一个实例,也就是一个类只有一个实例.下面是苹果官方文档中关于单例模式的图片: 如图所示,左边的图是默认的 ...

  5. Java中常用来处理时间的三个类:Date、Calendar、SimpleDateFormate,以及Java中的单例设计模式:懒汉式、饿汉式以及静态内部类式

    (一)java.util.Date类 1.该类有一个long类型的属性:用来存放时间,是用毫秒数的形式表示,开始的日期是从1970年1月1号 00:00:00.    2.该类的很多方法都已经过时,不 ...

  6. 转--python 中写单例

    原文地址 原文地址2 Python中的单例模式的几种实现方式的及优化 阅读目录(Content) 单例模式 实现单例模式的几种方式 1.使用模块 2.使用装饰器 3.使用类 4.基于__new__方法 ...

  7. java中的单例设计模式

    单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供 ...

  8. python中的单例

    使用__new__ 因为一个类每一次实例化的时候,都会走它的__new__方法.所以我们可以使用__new__来控制实例的创建过程,代码如下: class Single: instance = Non ...

  9. iOS——Swift开发中的单例设计模式(摘译,非原创)

    最近在开发一个小的应用,遇到了一些Objective-c上面常用的单例模式,但是swift上面还是有一定区别的,反复倒来倒去发现不能按常理(正常的oc to swift的方式)出牌,因此搜索了一些帖子 ...

随机推荐

  1. Linux学习笔记之阿里云ECS部署LAMP环境

    LAMP指Linux+Apache+MySQL/MariaDB+Perl/PHP/Python,是一组常用来搭建动态网站或者服务器的开源软件.它们本身都是各自独立的程序,但是因为常被放在一起使用,拥有 ...

  2. Windos 系统网络连接 调优

    1.运行进入注册表:regedit 2.进入注册表指定路径 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters ...

  3. java switch笔记

    1. 在Java7之前,switch只能支持byte.short.char.int或者其对应的封装类以及Enum类型 2. Java7后,开始支持String 3. switch语句中,表达式的值不能 ...

  4. 安装centos7最小化安装

    分享一篇不错的文章: https://www.howtoforge.com/tutorial/centos-7-server/

  5. 20145312 《Java程序设计》第三周学习总结

    20145312 <Java程序设计>第三周学习总结 学习笔记 Chapter 4 4.1类与对象 4.1.1 定义类 1.以服饰设计为例,类定义用class关键词,建立衣服实例要用new ...

  6. 20145240《网络对抗》逆向及Bof基础实践

    逆向及Bof基础实践 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包 ...

  7. Ubuntu 12.10 用wubi安装到硬盘中

    wubi安装的优势: ubuntu可以像安装软件一样方便的安装.删除,不影响物理机的原有系统 这种方式安装的ubuntu不用担心功能会有所缺失,ubuntu所有的功能都在 和安装了双系统一样,没有什么 ...

  8. 解题报告:poj1083 Moving tables

    2017-09-02 19:49:59 writer:pprp 题意说明: 比较简单的题,一开始被吓到了,后来才发现,其实可以用很简单的方法就可以解决: 就是在这样的房间中如果在i 和 j 中之后的1 ...

  9. 深入理解Java枚举类型(enum)

    https://blog.csdn.net/javazejian/article/details/71333103 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(en ...

  10. Android -- 多线程下载, 断点下载

    1. 原理图 2. 示例代码 需要权限 <uses-permission android:name="android.permission.INTERNET"/> &l ...