python版本的享元模式

# -*- coding:UTF-8 -*-
import abc


class Flyweight(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def operation(self, extrinsicstate):
        pass


class ConcreteFlyweight(Flyweight):
    def operation(self, extrinsicstate):
        print("具体Flyweight:" + extrinsicstate)


class UnsharedConcreteFlyweight(Flyweight):
    def operation(self, extrinsicstate):
        print("不共享的具体Flyweight:" + extrinsicstate)


class FlyweightFactory:
    def __init__(self):
        self.flyweights = {}
        self.flyweights.update({"X": ConcreteFlyweight()})
        self.flyweights.update({"Y": ConcreteFlyweight()})
        self.flyweights.update({"Z": ConcreteFlyweight()})

    def get_flyweight(self, key):
        return self.flyweights.get(key, None)


if __name__ == "__main__":
    extrinsicstate = 22
    f = FlyweightFactory()
    fx = f.get_flyweight("X")
    extrinsicstate -= 1
    fx.operation(str(extrinsicstate))

    fy = f.get_flyweight("Y")
    extrinsicstate -= 1
    fy.operation(str(extrinsicstate))

    fz = f.get_flyweight("Z")
    extrinsicstate -= 1
    fz.operation(str(extrinsicstate))

    uf = UnsharedConcreteFlyweight()
    extrinsicstate -= 1
    uf.operation(str(extrinsicstate))

 

posted @ 2018-01-25 15:22  gjw  阅读(93)  评论(0)    收藏  举报