设计模式读书笔记-享元模式

2016-08-21
读书笔记
  • 定义:使用共享对象可有效地支持大量的细粒度对象。是池技术的重要实现方式。
  • 享元模式:将实例存放到内存中。内存中存在大量实例对象,但并不是所有的实例均有效,可能GC还未到回收时机,采用享元模式可节省内存。如对象池机制可以节省大量实例占用的内存空间。
  • 代码:

    public class SignInfo {
    
        private String id;//考试人员ID
        private String location;//考点
        private String address;
        private String phone;
    
        public void printSignInfo(){
            System.out.println("考试人员ID:"+id+",考点:"+location+",地址:"+address+",电话:"+phone);
        }
    }
    
    public class SignInfo4Pool extends SignInfo{//给SignInfo对象增加key属性
    
        private String key;//get  set
    
        public SignInfo4Pool(String key){
            this.key = key;
        }
    }
    
    public class SignInfoFactory {
    
        private static HashMap<String,SignInfo> pool = new HashMap<String,SignInfo>();
    
        public static SignInfo getSignInfo(String key){
            SignInfo result = null;
            if(!pool.containsKey(key)){
                result = new SignInfo4Pool(key);
                pool.put(key, result);
                System.out.println("建立对象--"+key+"--,并放置到对象池中");
            }else{
                result = pool.get(key);
                System.out.println("直接从对象池中取对象:"+key);
            }
            return result;
        }
    }
    
    public class Client {
    
        public static void main(String[] args) {
            for(int i=0;i<4;i++){
                String location = "考点"+i;
                for(int j=0;j<10;j++){
                    String key = location+",人员"+j;
                }
            }
    
            SignInfo signInfo = SignInfoFactory.getSignInfo("考点3,人员5");
            signInfo.printSignInfo();
        }
    }
    

Kommentare: