单例模式的四种实现模式
单例模式实现方式一:
 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. day10_python_1124

    认知: 随着年龄阅历的变化而变化.01 去年内容回顾 *args **kwargs: 万能参数,动态参数 * 魔性用法: 函数的定义时,* ** 聚合. 函数的执行时,* ** 打散. 形参顺序: 位 ...

  2. 生成器yield

    #!/usr/bin/python#coding=utf-8'''Created on 2017年11月23日 from home @author: James zhan ''' def counte ...

  3. 超恶心的TP模版取值

    一.JS事件中 在使用H-uiAdmin做后台开发的时候,碰到了使用元素点击触发js函数展示弹窗的写法 但是在js函数中还需要使用U函数生成url以及使用$vo.id来传值 反复试了一下模版标签的写法 ...

  4. js生成指定范围的随机数

    <!doctype html> <html lang="en"> <head> <meta http-equiv="Conten ...

  5. 第一章01:熟悉java,发展历史

    1. java由来: 原公司,sun,后来被oracle\甲骨文公司收购 java,主要用于开发互联网软件,例如:QQ.迅雷.淘宝.京东

  6. centos7下stf安装介绍(一)----环境搭建

    重要:node version需要8.x.x 介绍 stf 全称 Smartphone Test Farm ,一款WEB 端移动设备批量管理工具(Remote control all your Sma ...

  7. Java语法基础学习DayThirteen(枚举类和注解)

    一.枚举类 1.概述:即一个类中只能有有限个对象,若只有一个对象,则可以作为单例模式的一种实现. 2.自定义枚举类(JDK1.5以前这么做) //枚举类 class Season{ //1.提供类的属 ...

  8. mysql8.0.13 的docker镜像安装

    1.从docker中获取mysql8.0.13镜像 docker pull mysql:8.0.13通过 docker images 命令查看镜像是否获取到了 2.运行 mysql8.0.13 镜像 ...

  9. yuan的第二次随笔

    第一题: 计算两数的和与差 设计思路: 1:看题目:主函数与函数声明,知道它要你干什么 2:理解与分析:在main中,定义两个实数a,b;要你求两数的和与差 3:解答:通过调用函数sum_diff,指 ...

  10. 初窥async,await

    首先是一道今日头条的面试题:(听说是今日头条的并且已经烂大街了) async function async1() { console.log( 'async1 start' ) await async ...