zoukankan      html  css  js  c++  java
  • 设计模式(第十二式:享元模式)

    概念:
      享元模式:Use sharing to support large numbers of fine-gained object efficiently.使用享元模式可以有效地支持大量的细粒度额对象。这中英文翻译过来的定义,是不是看的一头雾水。简单来说就是结合工厂模式的对象池。看代码,其实倒不是很难。

    实现:
      享元对象(接口就定义了一个reader的方法,就不写了)

     1 public class Book implements IBook {
     2     public Book(String type){
     3         this.type = type;
     4     }
     5 
     6     private String type;
     7 
     8     @Override
     9     public void reader() {
    10         System.out.println("我正在读"+type+"书");
    11     }
    12 }


        享元对象工厂

     1 public class BookFactory {
     2     private static Map<String,Book> pool = new HashMap<>();
     3 
     4     private BookFactory(){}
     5 
     6     public static Book getBook(String type){
     7         Book book = pool.get(type);
     8         if(book ==null){
     9             book = new Book(type);
    10             pool.put(type,book);
    11         }
    12         return book;
    13     }
    14 }


    分析:
      1.很明显的特征,享元模式几乎和懒汉式单例相同,只是在内部添加了Map容器作为对象池存储对象
      2.享元模式的适用范围,也就是为什么要加一个对象池,主要是用对象被高频率创建,对象生命周期又比较短,垃圾回收器还没来及的回收无用对象,造成无用对象大量占用内存空间,添加对象池的作用就反复使用同一对象。
      3.很明显,享元模式使用的都是同一对象,所以在对享元模式对对象有修改操作时,多线程都有可能会出现问题,关于多线程使用享元模式也是需要注意的。




  • 相关阅读:
    linux 查看磁盘空间
    nginx面试中最常见的18道题
    spring -mvc service层调用工具类配置
    IntelliJ IDEA tomcat 远程Ddbug调试
    IntelliJ IDEA tomcat 热部署
    Java HttpClient PostMethod
    Java Base64 加密/解密
    启动tomcat时cmd窗口一闪而过
    remote staging type or host is not specified
    Maven更新后本地仓库jar后缀带有 lastUpdated
  • 原文地址:https://www.cnblogs.com/ben-mario/p/11133082.html
Copyright © 2011-2022 走看看