设计模式之享元模式

享元模式,即共享元素对象,他的目的就是为了避免大量的创建对象,复用已经创建好的对象,从而节省内存的的开销,提升了系统的性能。他的核心思路是的将一个对象存储在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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值