Wzorce projektowe Pythona - Flyweight

Wzorzec wagi muszej należy do kategorii wzorców projektowania strukturalnego. Zapewnia sposób na zmniejszenie liczby obiektów. Zawiera różne funkcje, które pomagają w ulepszaniu struktury aplikacji. Najważniejsza cecha obiektów wagi muszej jest niezmienna. Oznacza to, że po zbudowaniu nie można ich modyfikować. Wzorzec używa HashMap do przechowywania obiektów referencyjnych.

Jak zaimplementować wzorzec flyweight?

Poniższy program pomaga we wdrożeniu wzorca muszego -

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()

Wynik

Powyższy program generuje następujące dane wyjściowe -