1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| import java.util.HashMap;
interface Shape { void draw(); }
class Circle implements Shape { String color; int x; int y; 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); } }
class ShapeFactory { private static final HashMap<String, Shape> 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; } }
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); } }
|