安卓系列之设计模式:享元模式

165 阅读1分钟

定义

运用共享技术有效地支持大量细粒度的对象,该模式属于结构型模式。

应用场景

系统对象过多

优点

节省内存和CPU资源

具体代码实现

例子说明:杯子对象,根据传入的容量大小去存储对象到hashmap中,创建一个对象前先判断hashmap里是否有,若有则不创建,若无则创建并加入到hashmap。

对象

package com.elaine.testpattern.flyweight;

/**
 * 杯子对象
 * author: elaine
 * date: 2021/4/26
 */
public class Cup {
    private int capacity;
    private String color;
    private String shape;

    /**
     * 构造函数
     *
     * @param capacity 容量
     */
    public Cup(int capacity) {
        this.capacity = capacity;
    }

    public int getCapacity() {
        return capacity;
    }

    public void setCapacity(int capacity) {
        this.capacity = capacity;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getShape() {
        return shape;
    }

    public void setShape(String shape) {
        this.shape = shape;
    }

    @Override
    public String toString() {
        return "Cup{" +
                "capacity='" + capacity + ''' +
                ", color='" + color + ''' +
                ", shape='" + shape + ''' +
                '}';
    }
}

工厂

用于管理

package com.elaine.testpattern.flyweight;

import android.util.Log;

import java.util.HashMap;

/**
 * 容器管理
 * author: elaine
 * date: 2021/4/26
 */
public class CupFactory {
    //hashMap存储对象
    private static final HashMap<Integer, Cup> containerHashMap = new HashMap<>();

    public static Cup getCup(int capacity) {
        //获取hashMap中是否有对象,若无则创建,若有则直接放回对象
        Cup cup = containerHashMap.get(capacity);
        if (cup == null) {
            cup = new Cup(capacity);
            containerHashMap.put(capacity, cup);
            Log.e("建立新的实体对象--杯子", capacity + "毫升");
        }
        return cup;
    }
}

运行代码

private void use() {
      Cup cup = CupFactory.getCup(100);
      cup.setColor("红色");
      cup.setShape("圆形");
      Log.e("cup", cup.toString());

      Cup cup2 = CupFactory.getCup(200);
      cup2.setColor("黄色");
      cup2.setShape("方形");
      Log.e("cup2", cup2.toString());

      Cup cup3 = CupFactory.getCup(300);
      cup3.setColor("黄色");
      cup3.setShape("圆形");
      Log.e("cup3", cup3.toString());
      
      //这个对象第一个就创建了,所以不需要再创建了
      Cup cup4 = CupFactory.getCup(100);
      cup4.setColor("红色");
      cup4.setShape("长方形");
      Log.e("cup4", cup4.toString());
}

运行结果

图片

若帅哥美女对该系列文章感兴趣,可微信搜索公众号(木子闲集)关注更多更新文章哦,谢谢~