设计模式之享元模式

来源:互联网 发布:zz高达知乎 编辑:程序博客网 时间:2024/05/10 02:41

享元模式,即共享元素对象,他的目的就是为了避免大量的创建对象,复用已经创建好的对象,从而节省内存的的开销,提升了系统的性能。他的核心思路是的将一个对象存储在map集合里面,当调用这个方法时候从集合中获取,如果没有就创建再返回,如果有直接复用此对象。例如线程池、数据库连接池、字符串等此设计模式比较简单,下面直接贴代码。

1、创建享元接口

public interface Flyweight {    void setColor(int id);}
2、具体的享元实现对象,内部需要封装Flyweight的内部状态,必须是共享的。

public class ConcreteChess implements Flyweight {    private String color;    public ConcreteChess(String color) {        this.color =color;    }    @Override    public void setColor(int id) {       System.out.println("id:"+id+"-------"+"color:"+color);    }}
3、享元工厂类,核心类

public class FlyWeightFactory {    //创建享元池,保存对象    private static HashMap<String,Flyweight> map = new HashMap<>();    public    Flyweight getFlyweight(String color){        if (map.get(color)!=null) {            Flyweight  flyweight = map.get(color);            return flyweight;        } else {            ConcreteChess flyweight = new ConcreteChess(color);            map.put(color,flyweight);            return flyweight;        }    }}
4、测试类

public class MyClass {    public static void main(String[] args){        FlyWeightFactory flyWeightFactory = new FlyWeightFactory();        Flyweight red = flyWeightFactory.getFlyweight("red");        red.setColor(1);        Flyweight blue = flyWeightFactory.getFlyweight("blue");        blue.setColor(2);        Flyweight yello = flyWeightFactory.getFlyweight("yello");        yello.setColor(3);    }}
运行结果如下:

id:1-------color:red
id:2-------color:blue
id:3-------color:yello


0 0