单例模式的四种实现模式
单例模式实现方式一:
 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. HTML5:图片、音乐和视频

    图片.音乐和视频 一.图片 1.属性 属性 说明 alt 规定图像的替代文本. src 规定显示图像的 URL align 规定如何根据周围的文本来排列图像. border 定义图像周围的边框. he ...

  2. .net ORM框架(Dapper简单应用)

    1.引入 Dapper.dll类库 2.创建书籍模型book using System; using System.Collections.Generic; using System.Linq; us ...

  3. Linux 应用——常用函数(usual function)

    main函数: 新建testmain.c #include <sys/types.h>#include <sys/stat.h>#include <fcntl.h> ...

  4. vscode 插件推荐 - 献给所有前端工程师(更新与2018.8.1)

    VScode现在已经越来越完善.性能远超Atom和webstorm,你有什么理由不用它?在这里,我会给你们推荐很多实用的插件,让你对 vscode 有更深刻的体会,渐渐地你就会知道它有多好用. 走马观 ...

  5. 【oracle入门】数据模型

    数据模式也是一这种模型,它是数据库中用于提供信息表示的操作手段的形式架构,是数据库中用来对现实世界惊喜抽象的工具.数据模型按不同的应用层次分为3种类型,分别为概念数据模型.逻辑数据模型.物理数据模型. ...

  6. 【oracle入门】数据库系统结构----三级模式

    概念模式:概念模式也称模式,是对数据库中全局数据路基结构的描述,是全体用户公共的数据视图.这种描述是抽象描述,不涉及具体硬件环境与平台,也与具有软件环境无关. 外模式:外模式也称子模式或者用户模式,他 ...

  7. Oracle之 dmp导入/导出、数据库操作等过程中的字符集问题

    影响Oracle数据库字符集最重要的参数是NLS_LANG参数. 它的格式如下: NLS_LANG = language_territory.charset 它有三个组成部分(语言.地域和字符集),每 ...

  8. 详解Makefile 函数的语法与使用 (转)

    使用函数: 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函数的返回值可以当做变量来使 ...

  9. 【leetcode】437. Path Sum III

    problem 437. Path Sum III 参考 1. Leetcode_437. Path Sum III; 完

  10. mysql数据库简单入门

    1.xampp  跨平台 优点:兼容性高 2. apache(服务器) 著名的集成环境(也叫集成安装包) 功能:一般在网站上运行,优点:稳定 缺点:性能上有瓶颈 nginx 优点:快 3. mysql ...