设计模式-11-享元模式

来源:互联网 发布:算法的乐趣代码 编辑:程序博客网 时间:2024/06/03 21:45

享元模式:主要用于减少创建对象的数量,以减少内存的占用和提高性能。

享元模式的核心在于享元工厂类,享元工厂类的作用在于提供一个用于存储享元对象的享元池,用户需要对象时,首先从享元池中获取,如果享元池中不存在,则创建一个新的享元对象返回给用户,并在享元池中保存该新增对象。

package com.structuralPattern.enjoy_yuan.edition1;public abstract class Shape {    public abstract void draw();}
package com.structuralPattern.enjoy_yuan.edition1;public class Circle extends Shape{    private String color;    public Circle(String color){        this.color = color;    }    public void draw() {        System.out.println("画了一个" + color +"的圆形");    }}
package com.structuralPattern.enjoy_yuan.edition1;import java.util.HashMap;import java.util.Map;public class FlyweightFactory{    static Map<String, Shape> shapes = new HashMap<String, Shape>();    public static Shape getShape(String key){        Shape shape = shapes.get(key);        //如果shape==null,表示不存在,则新建,并且保持到共享池中        if(shape == null){            shape = new Circle(key);            shapes.put(key, shape);        }        return shape;    }    public static int getSum(){        return shapes.size();    }}
package com.structuralPattern.enjoy_yuan.edition1;public class Client {    public static void main(String[] args) {        Shape shape1 = FlyweightFactory.getShape("红色");        shape1.draw();        Shape shape2 = FlyweightFactory.getShape("灰色");        shape2.draw();        Shape shape3 = FlyweightFactory.getShape("绿色");        shape3.draw();        Shape shape4 = FlyweightFactory.getShape("红色");        shape4.draw();        Shape shape5 = FlyweightFactory.getShape("灰色");        shape5.draw();        Shape shape6 = FlyweightFactory.getShape("灰色");        shape6.draw();        System.out.println("一共绘制了"+FlyweightFactory.getSum()+"中颜色的圆形");    }}
原创粉丝点击