學究嘛,就記錄一下;本質都是通過設定乙個標誌位來實現, 通俗的講就是當第一次例項化時, 記錄下"已經例項化了", 當再次例項化時, 將"記錄"的位址返回;
題外話, 函式它不香麼? 還物件導向, 要什麼物件.
class singleton:
def __init__(self, cls):
self._cls = cls
self._instance = {}
def __call__(self, *args):
if self._cls not in self._instance:
self._instance[self._cls] = self._cls(*args)
return self._instance[self._cls]
# 用法
@singleton
class girlfriend:
pass
class girlfriend:
def __new__(cls, *args, **kw):
if not hasattr(cls, '_instance'):
cls._instance = super().__new__(cls)
return cls._instance
# 用法
lucy = girlfriend()
class girlfriend(type):
def __new__(cls, name, bases, attrs):
cls._instance = none
return type.__new__(cls, name, bases, attrs)
def __call__(cls, *args, **kw):
if cls._instance is none:
cls._instance = type.__call__(cls, *args, **kw)
return cls._instance
# 用法
class lucy(metaclass=girlfriend):
pass
裝飾器實現比較簡單, 也好理解 單例模式 的5種實現
一 餓漢式 類裝載的時候完成初始化,避免了多執行緒問題,缺點 在裝載的時候完成初始化,記憶體可能浪費 class singleton private final static singleton instance new singleton public static singleton getin...
單例模式(5種實現方式)
1.餓漢式 不支援併發 此模式只能執行在單執行緒下,且類在載入時就已經建立好了例項,不管需不需要用。package com.lys 餓漢式 public class singleton1 private static singleton1 instance new singleton1 public...
5種方式實現單例模式
破壞單例模式的方法及應對 使用場景 單例模式的核心是乙個類只允許有乙個例項化物件。spring物件池預設就是單例模式。如果生產環境下某類只需要也只允許有乙個例項化物件就可以考慮使用單例模式。實現單例模式的策略是 構造方法私有化,也就是外部不允許通過new的方式獲取物件,而是提供乙個公開的靜態方法供外...