Flyweight Design Pattern

Flyweight pattern is primarily used tojava

  • reduce the number of objects created
  • decrease memory footprint
  • increase performance.

Flyweight pattern tries to reuse already existing similar kind objects by storing them and creates new object when no matching object is found.dom

This type of design pattern comes under structural pattern. ide

 

Below is an example with diagram and code as further explanation. this

Diagram

 

Code Explanation. 

We will demonstrate this pattern by drawing 20 circles of different locations but we will create only 5 objects.spa

Only 5 colors are available so color property is used to check already existing Circle objects.code

 Step 1 create interface Shape.java

Shape.javaorm

public interface Shape {
   void draw();
}

Step 2. Create Concrete class implementing the same interface. 

public class Circle implements Shape {
   private String color;
   private int x;
   private int y;
   private int radius;

   public Circle(String color){
      this.color = color;        
   }

   public void setX(int x) {
      this.x = x;
   }

   public void setY(int y) {
      this.y = y;
   }

   public void setRadius(int radius) {
      this.radius = radius;
   }

   @Override
   public void draw() {
      System.out.println("Circle: Draw() [Color : " + color + ", x : " + x + ", y :" + y + ", radius :" + radius);
   }
}

Step 3. Create a factory to generate object of concrete class based on given information.

ShapeFactory.javablog

import java.util.HashMap;

public class ShapeFactory {

   // Uncomment the compiler directive line and
   // javac *.java will compile properly.
   // @SuppressWarnings("unchecked")
   private static final HashMap circleMap = new HashMap();

   public static Shape getCircle(String color) {
      Circle circle = (Circle)circleMap.get(color);

      if(circle == null) {
         circle = new Circle(color);
         circleMap.put(color, circle);
         System.out.println("Creating circle of color : " + color);
      }
      return circle;
   }
}

Step 4

Use the factory to get object of concrete class by passing an information such as color.ci

FlyweightPatternDemo.javaget

public class FlyweightPatternDemo {
   private static final String colors[] = { "Red", "Green", "Blue", "White", "Black" };
   public static void main(String[] args) {

      for(int i=0; i < 20; ++i) {
         Circle circle = (Circle)ShapeFactory.getCircle(getRandomColor());
         circle.setX(getRandomX());
         circle.setY(getRandomY());
         circle.setRadius(100);
         circle.draw();
      }
   }
   private static String getRandomColor() {
      return colors[(int)(Math.random()*colors.length)];
   }
   private static int getRandomX() {
      return (int)(Math.random()*100 );
   }
   private static int getRandomY() {
      return (int)(Math.random()*100);
   }
}
相關文章
相關標籤/搜索