单例模式实现的三种方式

1、什么是单例模式    单例模式:基于某种方法实例化多次得到实例是同一个2、为何用单例模式    当实例化多次得到的对象中存放的属性都一样的情况,应该将多个对象指向同一个内存,即同一个实例3、如何用‘‘‘

# 单例模式实现方式一:# import settings## class Mysql:#     __instacne=None##     def __init__(self,ip,port):#         self.ip=ip#         self.port=port##     @classmethod#     def from_conf(cls):#         if cls.__instacne is None:#             cls.__instacne=cls(settings.IP,settings.PORT)#         return cls.__instacne# # obj=Mysql(‘1.1.1.10‘,3306)## obj1=Mysql.from_conf()# obj2=Mysql.from_conf()# obj3=Mysql.from_conf()## print(obj1)# print(obj2)# print(obj3)## obj4=Mysql(‘10.10.10.11‘,3307)

# 单例模式实现方式二:# import settings# def singleton(cls):#     cls.__instance=cls(settings.IP,settings.PORT)#     def wrapper(*args,**kwargs):#         if len(args) == 0 and len(kwargs) == 0:#             return cls.__instance#         return cls(*args,**kwargs)#     return wrapper## @singleton #Mysql=singleton(Mysql) #Mysql=wrapper# class Mysql:#     def __init__(self,ip,port):#         self.ip=ip#         self.port=port### obj1=Mysql() #wrapper()# obj2=Mysql() #wrapper()# obj3=Mysql() #wrapper()# print(obj1 is obj2 is obj3)# print(obj1)# print(obj2)# print(obj3)# obj4=Mysql(‘1.1.1.4‘,3308)# print(obj4)

# 单例模式实现方式三:import settings

class Mymeta(type):    def __init__(self,class_name,class_bases,class_dic): #self=Mysql        super(Mymeta,self).__init__(class_name,class_bases,class_dic )        self.__instance=self.__new__(self) #造出一个Mysql的对象        self.__init__(self.__instance,settings.IP,settings.PORT) #从配置文件中加载配置完成Mysql对象的初始化

# print(self.__instance)        # print(self.__instance.__dict__)

def __call__(self, *args, **kwargs): #self=Mysql        if len(args) == 0 and len(kwargs) == 0:            return self.__instance

obj=self.__new__(self)        self.__init__(obj,*args,**kwargs)        return obj

class Mysql(object,metaclass=Mymeta): #Mysql=Mymeta(...)    def __init__(self,ip,port):        self.ip=ip        self.port=port

obj1=Mysql()obj2=Mysql()obj3=Mysql()obj4=Mysql(‘10.10.10.11‘,3308)

print(obj1)print(obj2)print(obj3)print(obj4)

原文地址:https://www.cnblogs.com/fxc-520520/p/9256499.html

时间: 2025-01-08 14:13:54

单例模式实现的三种方式的相关文章

单例模式创建的三种方式

一.单例模式的好处 1.对于频繁使用的对象,可以省略new操作花费的时间,这对于那些重量级对象而言,是非常可观的一笔系统开销: 2.由于new操作的次数减少,因而对系统内存的使用频率也会降低,这将减轻GC压力,缩短GC停顿时间. 二.创建方式 1)饿汉式 1 public class Singleton { 2     private Singleton(){ 3         System.out.println("Singleton is create"); 4     } 5 

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

python实现单例模式的三种方式及相关知识解释 模块模式 装饰器模式 父类重写new继承 单例模式作为最常用的设计模式,在面试中很可能遇到要求手写.从最近的学习python的经验而言,singleton实现的四种方法都是python的重要特征,反过来也刚好是几种特征的最佳实现.(比如你平常开发中很难遇到几个需要写元类的地方)如果不能随手写出某种实现,说明你对于那种实现的概念还没有完全掌握.最近场通过写装饰器模式的singleton来复习装饰器概念. 1. module实现 #模块实现 from

【Spring】创建对象的三种方式

关于Spring的搭建可参见:浅析Spring框架的搭建.在测试之前还是应该先将环境配置好,将相关Jar包导进来.Spring创建的对象,默认情况下都是单例模式,除非通过scope指定. 一.通过构造函数创建对象. 2.1 利用无参构造函数+setter方法注入值 最基本的对象创建方式,只需要有一个无参构造函数(类中没有写任何的构造函数,默认就是有一个构造函数,如果写了任何一个构造函数,默认的无参构造函数就不会自动创建哦!!)和字段的setter方法. Person类: package com.

AngularJs学习——实现数据绑定的三种方式

三种方式: 方式一:<h5>{{msg}}</h5>  此方式在页面刷新的时候会闪现{{}} 方式二:<h5 ng-bind="msg"></h5> 方式三:<h5 ng-clock class="ng-clock">{{msg}}</h5> 示例代码: <!DOCTYPE html> <html lang="en" ng-app="myapp&q

小蚂蚁学习页面静态化(2)——更新生成纯静态化页面的三种方式

更新生成纯静态化页面的三种方式:1.按照时间间隔更新.2.手动更新.3.定时更新(需要系统配合). 1. 按照时间间隔更新. 当用户第一次访问这个页面的时候,程序自动判断,该静态文件是否存在,并且该文件是否还在有效时间内,如果该文件未超出了有效时间,用户访问的是已经生成的静态文件.如果超出了有效时间,用户得到的是动态输出的内容,同时重新生成静态文件.稍微修改一下昨天的代码为例: <?php //首先判断是否有静态文件,并且文件的最新修改时间到现在是否大于20秒 if(is_file('./tex

Linux中设置服务自启动的三种方式

有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统服务 主要用三种方式进行这一操作: ln -s                       在/etc/rc.d/rc*.d目录中建立/etc/init.d/服务的软链接(*代表0-6七个运行级别之一) chkonfig                命令行运行级别设置 ntsysv                   伪图形运行级别设置 注意:1.这三种方式主要用于以redhat为基础的发行版 2.如果还不知道运行级别是什么,那么最

Linux识别ntfs及挂载的三种方式

NTFS-3G是一个开源软件,支持在Linux操作系统下读写NTFS格式的分区.它能快速且安全的操作Windows XP,Windows Server 2003, Windows 2000 以及WindowsVista文件系统. 1 .环境准备 安装该软件需要依赖于fuse, Centos6.*中应该默认安装过fuse: [[email protected] yum.repos.d]# rpm -q fuse fuse-2.8.3-4.el6.i686 已经安装 如果没有安装可以yum安装或者编

Tomcat热部署的三种方式

热部署是指在你修改项目BUG的时候对JSP或JAVA类进行了修改在不重启WEB服务器前提下能让修改生效.但是对配置文件的修改除外! 1.直接把项目web文件夹放在webapps里. 2.在tomcat\conf\server.xml中的<host></host>内部添加<context/>标签: <Context debug="0" docBase="D:\demo1\web" path="/demo1"

【Struts2】Struts2获取session的三种方式

1.Map<String,Object> map =  ActionContext.getContext().getSession(); 2.HttpSession session = ServletActionContext.getRequest().getSession(); 3.让Action实现SessionAware接口,并实现public void setSession(Map<String, Object> session) {} 方法,Struts2会在实例化Act