单例模式的四种实现模式
单例模式实现方式一:
 import settings
 class MySQL:
  __instance=None
  def __init__(self, ip, port):
   self.ip = ip
   self.port = port
  @classmethod
  def from_conf(cls):
   if cls.__instance is None:
    cls.__instance=cls(settings.IP, settings.PORT)
   return cls.__instance
 obj1=MySQL.from_conf()
 obj2=MySQL.from_conf()
 obj4=MySQL('1.1.1.3',3302)
 print(obj1)
 print(obj2)
 print(obj4)
单例模式实现方式二:
 import settings
 def singleton(cls):
  _instance=cls(settings.IP,settings.PORT)
  def wrapper(*args,**kwargs):
   if args or kwargs:
    obj=cls(*args,**kwargs)
    return obj
   return _instance
  return wrapper
 @singleton                 #MySQL=singleton(MySQL)  #MySQL=wrapper
 class MySQL:
  def __init__(self, ip, port):
   self.ip = ip
   self.port = port
 # obj=MySQL('1.1.1.1',3306)  #obj=wrapper('1.1.1.1',3306)
 obj1=MySQL() #wrapper()
 obj2=MySQL() #wrapper()
 obj4=MySQL('1.1.1.3',3302)   #wrapper('1.1.1.3',3302)
 print(obj1)
 print(obj2)
 print(obj4)
单例模式实现方式三:
 import settings
 class Mymeta(type):
  def __init__(self,class_name,class_bases,class_dic):   #self=MySQL这个类
   self.__instance=self(settings.IP,settings.PORT)
  def __call__(self, *args, **kwargs):       # self=MySQL这个类
   if args or kwargs:
    obj=self.__new__(self)
    self.__init__(obj,*args, **kwargs)
    return obj
   else:
    return self.__instance
 class MySQL(metaclass=Mymeta):        #MySQL=Mymeta(...)
  def __init__(self, ip, port):
   self.ip = ip
   self.port = port
 obj1=MySQL()
 obj2=MySQL()
 obj4=MySQL('1.1.1.3',3302)
 print(obj1)
 print(obj2)
 print(obj4)
单例模式实现方式四:
 import settings
 class MySQL:
  def __init__(self, ip, port):
   self.ip = ip
   self.port = port
 instance=MySQL(settings.IP,settings.PORT)
 def f1():
  from singleton import instance
  print(instance)
 def f2():
  from singleton import instance,MySQL
  print(instance)
  obj=MySQL('1.1.1.3',3302)
  print(obj)
 f1()
 f2()

day29单例模式的4种实现模式的更多相关文章

  1. java单例模式(两种常用模式)

    单例模式是java中常见的设计模式 特点: 单例类只能有一个实例 单例类必须自己创建自己的唯一实例 单例类必须给所有的其他对象提供这一实例 单例模式是某个类只能有一个实例而且自动实例化并且向整个系统提 ...

  2. C++ 单例模式的几种实现研究

    都是从网上学得,整理下自己的理解. 单例模式有两种实现模式: 1)懒汉模式: 就是说当你第一次使用时才创建一个唯一的实例对象,从而实现延迟加载的效果. 2)饿汉模式: 就是说不管你将来用不用,程序启动 ...

  3. Android Activity 四种启动模式

    task和back stack(任务和回退栈) 任务启动,task被加入到回退栈的栈顶,返回的时候回退栈的栈顶任务会被弹出,并被销毁,栈中的前一任务恢复运行,当activity销毁是,系统不会保留ac ...

  4. JAVA中单例模式的几种实现方式

    1 线程不安全的实现方法 首先介绍java中最基本的单例模式实现方式,我们可以在一些初级的java书中看到.这种实现方法不是线程安全的,所以在项目实践中如果涉及到线程安全就不会使用这种方式.但是如果不 ...

  5. 设计模式学习之单例模式(Singleton,创建型模式)(4)

    假如程序中有一个Person类,我的需求就是需要在整个应用程序中只能new一个Person,而且这个Person实例在应用程序中进行共享,那么我们该如何实现呢? 第一步: 新建一个Person类,类中 ...

  6. Python中的单例模式的几种实现方式的优缺点及优化

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

  7. Java实现单例模式的9种方法

    一. 什么是单例模式 因程序需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计. 二. 单例模式的特点 1. 单例模式只能有一个实例. 2. 单例类必须创建 ...

  8. python实现单例模式的三种方式及相关知识解释

    python实现单例模式的三种方式及相关知识解释 模块模式 装饰器模式 父类重写new继承 单例模式作为最常用的设计模式,在面试中很可能遇到要求手写.从最近的学习python的经验而言,singlet ...

  9. Android:图解四种启动模式 及 实际应用场景解说

    在一个项目中会包括着多个Activity,系统中使用任务栈来存储创建的Activity实例,任务栈是一种“后进先出”的栈结构.举个栗子,若我们多次启动同一个Activity.系统会创建多个实例依次放入 ...

随机推荐

  1. sql查询练习

    #建学生信息表student create table student ( sno varchar(20) not null primary key, sname varchar(20) not nu ...

  2. centos安装ruby

    下面开始安装Ruby 一.下载Ruby源码包 wget ftp://ftp.ruby-lang.org/pub/ruby/2.1/ruby-2.1.7.tar.gz 二.解压安装Ruby tar zx ...

  3. LeetCode 81 搜索旋转排序数组II

    题目: 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] ). 编写一个函数来判断给定的目标值是否存在于 ...

  4. ubuntu 安装 nvm 管理Node.js 以及vim 插件增强

    安装curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bashsource ~/.bashr ...

  5. fiddler之数据统计(statistics)

    在使用fiddler代理监听访问时,可以使用statistics分页去统计请求和响应的一些信息. 界面显示如下: 可以在这里查看一个session的统计信息 说明: 1.request count:请 ...

  6. GOPATH

    环境变量 GOPATH 的值可以是一个目录的路径,也可以包含多个目录路径,每个目录都代表 Go 语言的一个工作区(workspace).这些工作区用于放置 Go 语言的源码文件(source file ...

  7. 2019-04-10-day029-粘包处理

    内容回顾 osi五层协议 不是真实存在的,只是抽象出来的模型 应用层 传输层 TCP/UDP TCP :全双工,可靠的,面向连接的,速度慢,对数据大小没有限制 建立连接 :三次握手 SYN ACK 断 ...

  8. 剑指Offer 25. 复杂链表的复制 (链表)

    题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用,否 ...

  9. 使用Sublime Text 3进行Markdown 编辑+实时预览

    这种做法可能会对你的磁盘IO造成一小部分性能负担,但负面影响足以忽略. 另外,由于这种频率的读写会被磁盘缓存接管,不必担心磁盘寿命的影响. 对于刚安装好的Sublime Text,我们需要安装一个软件 ...

  10. 冒泡排序到k趟

    浙大pat题目 将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们.通过一遍扫描,则最后一个元素必定是最大的元素.然后用同样的方 ...