flyweight_pattern_wiki.py
"""Flyweight Pattern
https://ja.wikipedia.org/wiki/Flyweight_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3
Desc:
等価なインスタンスを[別々の箇所]で使用する際に、
一つのインスタンスを再利用することによって、
プログラムを省リソース化することを目的とする。
(UML
FlyweightFactory <>-------------- Flyweight
- pool:Flyweight[]
+ getFlyweight()
(Ex
StampFactory <>-------------- Stamp
- pool: Stamp[]
+ get()
"""
# Flyweight
class Stamp:
def __init__(self, type: str):
self.__type = type
def print(self):
print(self.__type)
# FlyweightFactory
class StampFactory:
def __init__(self):
self.__pool = {}
# FlyweightFactory.getFlyweight()
def get(self, type: str) -> Stamp:
if type not in self.__pool:
self.__pool[type] = Stamp(type)
return self.__pool[type]
@property
def pool_size(self) -> int:
return len(self.__pool)
if __name__ == '__main__':
factory = StampFactory()
stamps = []
for c in 'たかいたけたてかけた':
stamps.append(factory.get(c))
for stamp in stamps:
stamp.print()
print('StampFactory pool size=', factory.pool_size)