美文网首页
Android 进阶-设计模式-享元设计模式

Android 进阶-设计模式-享元设计模式

作者: 伊泽瑞额 | 来源:发表于2019-06-18 10:10 被阅读0次
    定义

    使共享对象可以有效的支持大量的细粒度的对象,核心其实就是对象复用。

    使用场景
    1. message: 当我们创建message的时候,一般使用Message msg=Message.obtain( ),而不是直接new Message( ),因为Message.obtain()方法可以复用对象,并且用完之后可以回收;
    2. String 字符串常量池
    享元模式代码实现

    买火车票为例子:

    1.创建Ticket火车票:

    package com.example.amn.testdemo.xiangyuan;
    
    import java.util.Random;
    
    /**
     * 创建Ticket火车票
     */
    
    public class Ticket {
    
        //起点
        private String from;
    
        //终点
        private String to;
    
        public Ticket(String from,String to){
            this.from=from;
            this.to=to;
        }
    
        /**
         * 价格
         */
    
        public int getPrice(){
            return  new Random().nextInt(100) + 20 ;
    
        }
    }
    
    

    2.创建火车票查询工厂:

    package com.example.amn.testdemo.xiangyuan;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class TicketFactory {
    
        //对火车票 做一个缓存
        static Map<String , Ticket> sTicketMap = new HashMap<>() ;
    
        public static Ticket getTicket(String from , String to){
            String key = from + "-" + to ;
            //先从map缓存中取出一张票
            Ticket ticket = sTicketMap.get(key);
            // 如果不为空,直接返回
            if(ticket != null){
                return ticket;
            }
    
            //如果未空,则直接创建一个,然后存放到map集合中
            ticket = new Ticket(from,to);
            sTicketMap.put(key,ticket);
            return ticket;
    
    
        }
    }
    

    3.测试

    
           for (int i = 0; i < 1000; i++) {
                Ticket ticket = TicketFactory.getTicket("北京" , "广州") ;
            }
    
    

    相关文章

      网友评论

          本文标题:Android 进阶-设计模式-享元设计模式

          本文链接:https://www.haomeiwen.com/subject/jjrxqctx.html