Python-design-patterns-flyweight

提供:Dev Guides
移動先:案内検索

Pythonデザインパターン-フライウェイト

フライウェイトパターンは、構造設計パターンのカテゴリに分類されます。 オブジェクト数を減らす方法を提供します。 アプリケーション構造の改善に役立つさまざまな機能が含まれています。 フライウェイトオブジェクトの最も重要な機能は不変です。 これは、一度構築すると変更できないことを意味します。 このパターンは、HashMapを使用して参照オブジェクトを保存します。

フライウェイトパターンの実装方法

次のプログラムは、フライウェイトパターンの実装に役立ちます-

class ComplexGenetics(object):
   def __init__(self):
      pass

   def genes(self, gene_code):
      return "ComplexPatter[%s]TooHugeinSize" % (gene_code)
class Families(object):
   family = {}

   def __new__(cls, name, family_id):
      try:
         id = cls.family[family_id]
      except KeyError:
         id = object.__new__(cls)
         cls.family[family_id] = id
      return id

   def set_genetic_info(self, genetic_info):
      cg = ComplexGenetics()
      self.genetic_info = cg.genes(genetic_info)

   def get_genetic_info(self):
      return (self.genetic_info)

def test():
   data = (('a', 1, 'ATAG'), ('a', 2, 'AAGT'), ('b', 1, 'ATAG'))
   family_objects = []
   for i in data:
      obj = Families(i[0], i[1])
      obj.set_genetic_info(i[2])
      family_objects.append(obj)

   for i in family_objects:
      print "id = " + str(id(i))
      print i.get_genetic_info()
   print "similar id's says that they are same objects "

if __name__ == '__main__':
   test()

出力

上記のプログラムは、次の出力を生成します-

フライウェイトパターン