享元模式:運用共享技術有效地支援大量細粒度對象的複用。
享元對象關鍵是區分内部狀态和外部狀态:
内部狀态:存儲在對象内部并且不會随着環境改變而改變的狀态
外部狀态:随着環境改變而改變的、不可以共享的狀态,外部狀态并且有用戶端儲存,通過用戶端在需要的時候傳入到對象内部。
from abc import ABCMeta,abstractmethod
import logging
class Pigment:
def __init__(self,color):
self.__color = color
self.__user = ""
def getColor(self):
return self.__color
def setUser(self,user):
self.__user = user
return self;
def showInfo(self):
print("%s 取得 %s色顔料"%(self.__user,self.__color))
class PigmengFactory:
def __init__(self):
self.__sigmentSet={
"紅": Pigment("紅"),
"黃": Pigment("黃"),
"藍": Pigment("藍"),
"綠": Pigment("綠"),
"紫": Pigment("紫"),
}
def getPigment(self,color):
pigment = self.__sigmentSet.get(color)
if pigment is None:
logging.error("沒有%s的顔料",color)
else:
return pigment
def test():
factory = PigmengFactory()
red = factory.getPigment("紅").setUser("A隊")
red.showInfo()
factory = PigmengFactory()
red = factory.getPigment("藍").setUser("B隊")
red.showInfo()
factory = PigmengFactory()
red = factory.getPigment("黃").setUser("C隊")
red.showInfo()
test()
運作結果:
A隊 取得 紅色顔料
B隊 取得 藍色顔料
C隊 取得 黃色顔料
aaa