Python Design Patterns - Flyweight

Neha Kumawat

5 months ago

Python Design Patterns - Flyweight | insideAIML
Table of Contents
  • Introduction
  • How to implement the flyweight pattern?

Introduction

          The flyweight patterb comes under the structural design patterns category. It provides a way to decrease object count. It includes various features that help in improving application structure. The most important feature of the flyweight objects is immutable. This means that they cannot be modified once constructed. The pattern uses a HashMap to store reference objects.

How to implement the flyweight pattern?

          The following program helps in implementing the flyweight pattern −

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

Output

The above program generates the following output −
id = 139699273716368
ComplexPatter[ATAG]TooHugeinSize
id = 139699273718160
ComplexPatter[AAGT]TooHugeinSize
id = 139699273716368
ComplexPatter[ATAG]TooHugeinSize
similar id's says that they are same objects 
     
Like the Blog, then Share it with your friends and colleagues to make this AI community stronger. 
To learn more about nuances of Artificial Intelligence, Python Programming, Deep Learning, Data Science and Machine Learning, visit our insideAIML blog page.
Keep Learning. Keep Growing. 

Submit Review