zoukankan      html  css  js  c++  java
  • 设计模式之 享元模式

    享元模式 通过对象的复用来减少对象创建的次数和数量,以减少系统内存的使用和降低系统的负载。在系统需要一个对象时,享元模式首先在系统中查找并尝试重用现有的对象,如果未找到匹配的对象,则创建新对象并将其缓存在系统中以便下次使用。

    image

    (1)定义Memory

    public class Memory{
        private int size;
        private boolean isused;
        private String id;
        public Memory(int size,boolean isused,String id){
            this.size = size;
            this.isused = isused;
            this.id = id;
        }
        
        public int getSize() {
            return size;
        }
        
        public void setSize(int size) {
            this.size = size;
        }
        
        public boolean isIsused() {
            return isused;
        }
    
        public void setIsused(boolean isused) {
            this.isused = isused;
        }
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    }

    (2)定义MemoryFactory工厂

    public class MemoryFactory{
        private final static Log logger = LogFactory.getLog(this.getClass());
    
        private static List<Memory> memoryList = new ArrayList<>();
        public static Memory getMemory(int size){
            Memory memory = null;
            for (int i = 0; i<memoryList.size();i++){
                memory = memoryList.get(i);
                // 如果存在和需求size一样大小并且未使用的内存块,则直接使用
                if (memory.getSize() == size && memory.isIsused() == false){
                    memory.setIsused(true);
                    memoryList.set(i,memory);
                    logger.info("get memory from memoryList");
                    break;
                }
            }
            if (memory == null){
                memory = new Memory(32,false, UUID.randomUUID().toString());
                memoryList.add(memory);
            }
    
            return memory;
        }
    
        // 释放内存
        public static void releaseMemory(String id){
            for (int i = 0; i < memoryList.size(); i++) {
                Memory memory = memoryList.get(i);
                if (memory.getId().equals(id)){
                    memory.setIsused(false);
                    memoryList.set(i,memory);
                    logger.info("release memory"+id);
                    break;
                }
            }
        }
    }

    (3)使用享元模式

    public static void main(String[] args){
        // 获取内存
        Memory memory = MemoryFactory.getMemory(32);
        // 释放内存
        MemoryFactory.releaseMemory(memory.getId());
        // 重新获取内存
        MemoryFactory.getMemory(32);
    }

  • 相关阅读:
    TensorFlow(十五):使用inception-v3实现各种图像识别
    TensorFlow(十四):谷歌图像识别网络inception-v3下载与查看结构
    TensorFlow(十三):模型的保存与载入
    TensorFlow(十二):使用RNN实现手写数字识别
    TensorFlow(十一):递归神经网络(RNN与LSTM)
    TensorFlow(十):卷积神经网络实现手写数字识别以及可视化
    ffmpeg-20160628-git-bin.7z
    ffmpeg-20160617-git-bin.7z ffmpeg-20160626-git-bin.7z
    欧洲杯 2016 高清直播
    YY 神曲 李明霖 14部合集
  • 原文地址:https://www.cnblogs.com/betterwgo/p/15239580.html
Copyright © 2011-2022 走看看