享元模式:运用共享技术有效地支持大量细粒度对象的复用。
享元对象关键是区分内部状态和外部状态:
内部状态:存储在对象内部并且不会随着环境改变而改变的状态
外部状态:随着环境改变而改变的、不可以共享的状态,外部状态并且有客户端保存,通过客户端在需要的时候传入到对象内部。
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