天天看點

Python設計模式-享元模式

享元模式:運用共享技術有效地支援大量細粒度對象的複用。

享元對象關鍵是區分内部狀态和外部狀态:

内部狀态:存儲在對象内部并且不會随着環境改變而改變的狀态

外部狀态:随着環境改變而改變的、不可以共享的狀态,外部狀态并且有用戶端儲存,通過用戶端在需要的時候傳入到對象内部。

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