Patrones de diseño de Python: peso mosca

El patrón de peso mosca se incluye en la categoría de patrones de diseño estructural. Proporciona una forma de reducir el recuento de objetos. Incluye varias características que ayudan a mejorar la estructura de la aplicación. La característica más importante de los objetos de peso mosca es inmutable. Esto significa que no se pueden modificar una vez construidos. El patrón usa un HashMap para almacenar objetos de referencia.

¿Cómo implementar el patrón de peso mosca?

El siguiente programa ayuda a implementar el patrón de peso mosca:

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

Salida

El programa anterior genera la siguiente salida: