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.很明显,享元模式使用的都是同一对象,所以在对享元模式对对象有修改操作时,多线程都有可能会出现问题,关于多线程使用享元模式也是需要注意的。




  • 相关阅读:
    165. Compare Version Numbers
    164. Maximum Gap
    3、桶排序
    162. Find Peak Element
    160. Intersection of Two Linked Lists
    155. Min Stack
    154. Find Minimum in Rotated Sorted Array II
    153. Find Minimum in Rotated Sorted Array
    Linux/Unix系统编程手册 第二章:基本概念
    Linux/Unix系统编程手册 第一章:历史和标准
  • 原文地址:https://www.cnblogs.com/ben-mario/p/11133082.html
Copyright © 2011-2022 走看看