python创建单例模式_python设计模式---创建型之单例模式

#coding = utf-8

"""# 经典单例

class Singleton:

def __new__(cls):

if not hasattr(cls, ‘instance‘):

cls.instance = super(Singleton, cls).__new__(cls)

return cls.instance

s1 = Singleton()

print(‘Object created‘, s1)

s2 = Singleton()

print(‘Object created‘, s2)

# 单例模式中的懒汉式实例化

class Singleton:

__instance = None

def __init__(self):

if not Singleton.__instance:

print(‘__init__ method called...‘)

else:

print(‘Instance already created: ‘, self.get_instance())

@classmethod

def get_instance(cls):

if not cls.__instance:

cls.__instance = Singleton()

return cls.__instance

s1 = Singleton()

print("Object created ", Singleton.get_instance())

s2 = Singleton()

# 通过__init__实现Monostate单态模式

class Borg:

__shared_stat = {"1": "one"}

def __init__(self):

self.x = 1

self.__dict__ = self.__shared_stat

pass

b1 = Borg()

b2 = Borg()

b1.x = 4

print(‘Borg Object b1: ‘, b1)

print(‘Borg Object b2: ‘, b2)

print(‘Object State b1: ‘, b1.__dict__)

print(‘Object State b2: ‘, b2.__dict__)

# 通过__new__实现Monostate单态模式

class Borg:

__shared_stat = {"1": "one"}

def __new__(cls, *args, **kwargs):

obj = super().__new__(cls, *args, **kwargs)

obj.__dict__ = cls.__shared_stat

return obj

b1 = Borg()

b2 = Borg()

b1.x = 4

print(‘Borg Object b1: ‘, b1)

print(‘Borg Object b2: ‘, b2)

print(‘Object State b1: ‘, b1.__dict__)

print(‘Object State b2: ‘, b2.__dict__)

# 元类示例

class MyInt(type):

def __call__(cls, *args, **kwargs):

print(‘****Here is my int****‘, args)

print(‘Now do whatever you want with this object...‘)

return type.__call__(cls, *args, **kwargs)

class int(metaclass=MyInt):

def __init__(self, x, y):

self.x = x

self.y = y

i = int(4, 5)

# 基于元类的单例

class MetaSingleton(type):

_instances = {}

def __call__(cls, *args, **kwargs):

if cls not in cls._instances:

cls._instances[cls] = super().__call__(*args, **kwargs)

return cls._instances[cls]

class Logger(metaclass=MetaSingleton):

pass

logger1 = Logger()

logger2 = Logger()

print(logger1, logger2)

# sqlite3数据库连接单例

import sqlite3

class MetaSingleton(type):

_instances = {}

def __call__(cls, *args, **kwargs):

if cls not in cls._instances:

cls._instances[cls] = super().__call__(*args, **kwargs)

return cls._instances[cls]

class Database(metaclass=MetaSingleton):

connection = None

cursor = None

def connect(self):

if self.connection is None:

self.connection = sqlite3.connect(‘db.sqlite3‘)

self.cursor = self.connection.cursor()

return self.cursor

db1 = Database().connect()

db2 = Database().connect()

print(‘Database Objects DB1‘, db1)

print(‘Database Objects DB2‘, db2)"""

#监控服务器单例

classHealthCheck:

_instance=None

_servers=[]def __new__(cls, *args, **kwargs):print(‘====new====‘)if notcls._instance:

cls._instance= super().__new__(cls, *args, **kwargs)print(cls._instance)print(‘=======cls._instance========‘, cls._instance)returncls._instance#def __init__(self):

#print(‘====init====‘)

#self._servers = []

defadd_server(self):

self._servers.append(‘Server 1‘)

self._servers.append(‘Server 2‘)

self._servers.append(‘Server 3‘)

self._servers.append(‘Server 4‘)

self._servers.append(‘Server 5‘)print(self._servers)defchange_server(self):

self._servers.pop()

self._servers.append(‘Server 6‘)print(self._servers)def __len__(self):returnlen(self._servers)

hc1=HealthCheck()

hc1.add_server()print(‘Schedule health check for server (1)...‘)for i inrange(len(hc1)):print(‘Checking‘, hc1._servers[i])

hc2=HealthCheck()

hc2.change_server()print(‘Schedule health check for server (2)...‘)for i inrange(len(hc2)):print(‘Checking‘, hc2._servers[i])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值