单例模式中的四种方式

1、什么是单例模式?

单例模式指的是多种不同的实例化指向同一个实例

2、为何要去用单例模式?

使用单例模式是为了减少资源的浪费

3、如何去用单例模式?

方式一:

#先写一个setting模块用来存放(ip=None,port=None)
import setting
class Mysql:
    __instance=None
    def __init__(self,ip,port):
        self.ip=ip
        self.port=port
    @classmethod
    def srea(cls):
        if cls.__instance is None:
            cls.__instance=cls(setting.ip,setting.port)
        return cls.__instance
obj=Mysql.srea()
obj1=Mysql(‘1.1.1.1‘,203)
print(obj)
print(obj1)

方式二:

先写一个setting模块用来存放(ip=None,port=None)
import setting
def atuh(cls):
    _instance=cls(setting.ip,setting.port)
    def warpper(*args,**kwargs):
        if args or kwargs:
            obi=cls(*args,**kwargs)
            return obi
        return _instance
    return warpper
@atuh
class Mysql:
    def __init__(self,ip,port):
        self.ip=ip
        self.port=port
obj=Mysql()
obj1=Mysql()
obj2=Mysql(‘1.1.1.1‘,2206)
print(obj)
print(obj1)
print(obj2)

方式三:

先写一个setting模块用来存放(ip=None,port=None)
import setting
class Mymeta(type):
    def __init__(self,mysql,mysql_obj,mysql_dic):
        self._instance=self(setting.ip,setting.port)
    def __call__(self, *args, **kwargs):
        if args or kwargs:
            obj=self.__new__(self)
            self.__init__(obj,*args,**kwargs)
            return obj
        else:
            return self._instance
class Mysql(metaclass=Mymeta):
    def __init__(self,ip,port):
        self.ip=ip
        self.port=port
obj=Mysql()
obj1=Mysql()
obj2=Mysql(‘1.1.1.3‘,2206)
print(obj)
print(obj1)
print(obj2)

方式四:

先写一个setting模块用来存放(ip=None,port=None)再写一个song模块
song模块的代码如下:class Mysql:
    def __init__(self,ip,port):
        self.ip=ip
        self.port=port
instance=Mysql(‘1.1.1.1‘,2206)
主题代码吐下:
def f():
    from song import instance
    print(instance)
def f2():
    from song import instance, Mysql
    odj=Mysql(‘1.1.1.1‘,2206)
    print(odj)
f()
f2()

原文地址:https://www.cnblogs.com/ageliu/p/9551409.html

时间: 2024-12-25 17:48:48

单例模式中的四种方式的相关文章

C#_批量插入数据到Sqlserver中的四种方式

先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的是GUID,表中没有创建任何索引.GUID必然是比自增长要快的,因为你生成一个GUID算法所花的时间肯定比你从数据表中重新查询上一条记录的ID的值然后再进行加1运算要少.而如果存在索引的情况下,每次插入记录都会进行索引重建,这是非常耗性能的.如果表中无可避免的存在索引,我们可以通过先删除索引,然后批量插入,最后再重建索引的方式来提高效率. create database CarSYS;    go    use CarSYS;  

javaIO流之字节流的四种方式复制文件方式总结

/* * 需求:把e:\\a.mp4复制到当前项目目录下的copy.mp4中 * * 字节流四种方式复制文件: * 基本字节流一次读写一个字节: 共耗时:117235毫秒 * 基本字节流一次读写一个字节数组: 共耗时:156毫秒 * 高效字节流一次读写一个字节: 共耗时:1141毫秒 * 高效字节流一次读写一个字节数组: 共耗时:47毫秒 */ package cn.itcast_06; import java.io.BufferedInputStream; import java.io.Buf

单例模式的四种方式

单例模式的四种方式 一.内容 保证一个类只有一个实例,并提供一个访问它的全局访问点 二.角色 单利 三.使用场景 当类只有一个实例而且客户可以从一个众所周知的访问点访问它时 比如:数据库链接.Socket创建链接 四.优点 对唯一实例的受控访问 单利相当于全局变量,但防止了命名空间被污染 与单利模式功能相似的概念:全局变量.静态变量(方法) 试问?为什么用单例模式,不用全局变量呢? 答.全局变量可能会有名称空间的干扰,如果有重名的可能会被覆盖 五.单例模式的四种实现方式 1.文件导入的形式(常用

JAVA中集合输出的四种方式

在JAVA中Collection输出有四种方式,分别如下: 一) Iterator输出. 该方式适用于Collection的所有子类. public class Hello { public static void main(String[] args) throws Exception { Set<Person> javaProgramers = new HashSet<Person>(); javaProgramers.add(new Person("aaron&qu

Android中多线程的使用四种方式最全总结

当我们启动一个App的时候,Android系统会启动一个Linux Process,该Process包含一个Thread,称为UI Thread或Main Thread.通常一个应用的所有组件都运行在这一个Process中,当然,你可以通过修改四大组件在Manifest.xml中的代码块(<activity><service><provider><receiver>)中的android:process属性指定其运行在不同的process中.当一个组件在启动的

Struts2中访问web元素的四种方式

Struts2中访问web元素的四种方式如下: 通过ActionContext来访问Map类型的request.session.application对象. 通过实现RequestAware.SessionAware.ApplicationAware接口来访问Map类型的request.session.application对象(IoC方式). 通过ServletActionContext来访问Servlet API类型的HttpServletRequest. HttpSession. Serv

java中的四种单例实现方式

在java中,单例设计模式是非常常见的设计模式,对单例设计模式的概念,不做过多的介绍,下面将逐一介绍四种单例设计模式: 1.第一种单例设计模式 1.1 代码实现 package com.singleton.one; /**  * 第一种单例设计模式  * @author Administrator  *  */ public class SingleTonOne { // 实例化 private static SingleTonOne instance = new SingleTonOne();

Webform中Repeater控件--绑定嵌入C#代码四种方式

网页里面嵌入C#代码用的是<% %>,嵌入php代码<?php ?> 绑定数据的四种方式: 1.直接绑定 <%#Eval("Code") %> 2.调用函数 <%#ShowSex()%> 3.显示外键关系列 <%#Eval("Nation1.Name") %> 4.格式化显示 <%#Eval("Birthday","{0:yyyy年MM月dd日}") %>

Action中取得request,session的四种方式

在Struts2中,从Action中取得request,session的对象进行应用是开发中的必需步骤,那么如何从Action中取得这些对象呢?Struts2为我们提供了四种方式.分别为servlet 不相关的 非IoC 取得Request等对象的方式servlet 不相关的 IoC 取得Request等对象的方式servlet 相关的 非IoC 取得Request等对象的方式servlet 相关的 IoC 取得Request等对象的方式以下分别叙述. 首先请看struts.xml文件文件内容: