享元模式
1.享元模式
享元模式(Flyweight Pattern)主要用于减少对象的数量,以减少内存占用和提高性能。属于结构型模式,它提供了减少对象数量从而改
善应用所需的对象结构的方式。享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。
特别像工厂模式,工厂模式中是new一个对象返回的,享元模式是共享一个对象。
实现细节:用唯一标识码判断,如果在内存中有,则返回这个唯一标识码所标识的对象。若没有就创建一个对象并将其放入缓存池(HashMap)中。
2.例子Demo
import java.util.HashMap; interface Shape { public void draw(); } class Circle implements Shape { private int x; private int y; private int r; private String color; 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 setR(int r) { this.r = r; } public void draw() { System.out.println("Circle: [ color: " + color + " X: " + x + " Y: " + y + " R: " + r + " ]"); } } class ShapeFactory { private HashMap<String, Shape> map = new HashMap<String, Shape>(); public Shape getCircle(String color) { Shape circle = map.get(color); if (circle == null) { System.out.println("Create new circle, Color: " + color); circle = new Circle(color); map.put(color, circle); } return circle; } } public class FlyweightPatternDemo { private static final String colors[] = { "green", "red", "blue", "dark", "gray", "yellow" }; public static void main(String args[]) { ShapeFactory shapeFactory = new ShapeFactory(); for (int i = 0; i < 20; i++) { /*强制转换为Circle里后这些方法才可见*/ Circle circle = (Circle)shapeFactory.getCircle(getRandomColor()); circle.setX(getRandomX()); circle.setY(getRandomY()); circle.setR(getRandomR()); 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); } private static int getRandomR() { return (int)(Math.random() * 100); } }
参考:http://www.runoob.com/design-pattern/flyweight-pattern.html
posted on 2019-04-16 16:19 Hello-World3 阅读(122) 评论(0) 编辑 收藏 举报