设计模式(13)--享元模式

来源:互联网 发布:xp 1433端口怎么打开 编辑:程序博客网 时间:2024/05/29 16:40

什么是享元模式?
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,享元模式的主要核心就是减少对象的数量,在使用对象的时候尽量使用内存中已经存在的对象。

什么时候使用享元模式?
在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。

如何实现
享元模式的主要实现就是管理内存中已经存在的对象,把这些对象用集合或者map收集起来,再有创建对象需求的时候先检查内存中是否存在,存在则直接使用。

public interface Shape {    void draw();}
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 draw() {        System.out.println("Circle: Draw() [Color : " + color                +", x : " + x +", y :" + y +", radius :" + radius);    }}

实现享元:

public class ShapeFactory {    private static final HashMap<String, Shape> circleMap = new HashMap<String, Shape>();    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;    }}

测试类很简单,读者自己实现吧,如果Circle 对象中存在很多属性,需要全部相等才认为相等的话,key可以使用对象的hash值。

原创粉丝点击