05-01 創建型模式之單例模式


單例模式

1請手寫一個單例

#encoding=utf8
import threading
import time
#這里使用方法__new__來實現單例模式
class Singleton(object):#抽象單例
    def __new__(cls, *args, **kw):
        if not hasattr(cls, '_instance'):
            orig = super(Singleton, cls)
            cls._instance = orig.__new__(cls, *args, **kw)
        return cls._instance
#總線
class Bus(Singleton):
    lock = threading.RLock()
    def sendData(self,data):
        self.lock.acquire()
        time.sleep(3)
        print "Sending Signal Data...",data
        self.lock.release()
#線程對象,為更加說明單例的含義,這里將Bus對象實例化寫在了run里
class VisitEntity(threading.Thread):
    my_bus=""
    name=""
    def getName(self):
        return self.name
    def setName(self, name):
        self.name=name
    def run(self):
        self.my_bus=Bus()
        self.my_bus.sendData(self.name)

if  __name__=="__main__":
    for i in range(3):
        print "Entity %d begin to run..."%i
        my_entity=VisitEntity()
        my_entity.setName("Entity_"+str(i))
        my_entity.start()

2單例模式的優點和應用?

單例模式的優點:
1、由於單例模式要求在全局內只有一個實例,因而可以節省比較多的內存空間;
2、全局只有一個接入點,可以更好地進行數據同步控制,避免多重占用;
3、單例可長駐內存,減少系統開銷。
單例模式的應用舉例:
1、生成全局惟一的序列號;
2、訪問全局復用的惟一資源,如磁盤、總線等;
3、單個對象占用的資源過多,如數據庫等;
4、系統全局統一管理,如Windows下的Task Manager;
5、網站計數器。
6、數據庫配置,數據庫連接池
7、應用程序的日志應用

3單例模式的缺點

1、單例模式的擴展是比較困難的;
2、賦於了單例以太多的職責,某種程度上違反單一職責原則(六大原則后面會講到);
3、單例模式是並發協作軟件模塊中需要最先完成的,因而其不利於測試;
4、單例模式在某種情況下會導致“資源瓶頸”。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM