• 享元模式


    个人博客

    http://www.milovetingting.cn

    享元模式

    模式介绍

    享元模式是对象池的一种实现,用来尽可能减少内存使用量,它适合用于可能存在大量重复对象的场景,来缓存可共享的对象,达到对象共享、避免创建过多对象的效果,以提升性能、避免内存移除等。

    模式定义

    使用共享对象可有效地支持大量的细粒度的对象。

    使用场景

    1. 系统中存在大量的相似对象

    2. 细粒度的对象都具备较接近的外部状态,而且内部状态与环境无关,也就是说对象没有特定身份

    3. 需要缓冲池的场景

    简单使用

    创建接口

    public interface Ticket {
    
    	public void showTicketInfo(String bunk);
    
    }
    

    实现接口

    public class TrainTicket implements Ticket {
    
    	private String from;
    	private String to;
    	private int price;
    
    	public TrainTicket(String from, String to) {
    		super();
    		this.from = from;
    		this.to = to;
    	}
    
    	@Override
    	public void showTicketInfo(String bunk) {
    		price = new Random().nextInt(300);
    		System.out.println("购买 从 " + from + " 到 " + to + " 的 " + bunk + " 火车票,价格:" + price);
    	}
    
    }
    

    创建工厂类

    public class TicketFactory {
    
    	static Map<String, Ticket> sTicketMap = new ConcurrentHashMap<String, Ticket>();
    
    	public static Ticket getTicket(String from, String to) {
    		String key = from + "-" + to;
    		if (sTicketMap.containsKey(key)) {
    			System.out.println("使用缓存==>" + key);
    			return sTicketMap.get(key);
    		} else {
    			System.out.println("创建对象==>" + key);
    			Ticket ticket = new TrainTicket(from, to);
    			sTicketMap.put(key, ticket);
    			return ticket;
    		}
    	}
    
    }
    

    调用

    public class Main {
    
    	public static void main(String[] args) {
    		Ticket ticket1 = TicketFactory.getTicket("北京", "上海");
    		ticket1.showTicketInfo("上铺");
    		Ticket ticket2 = TicketFactory.getTicket("北京", "上海");
    		ticket1.showTicketInfo("中铺");
    		Ticket ticket3 = TicketFactory.getTicket("北京", "上海");
    		ticket1.showTicketInfo("下铺");
    	}
    
    }
    

    输出结果

    创建对象==>北京-上海
    购买 从 北京 到 上海 的 上铺 火车票,价格:44
    使用缓存==>北京-上海
    购买 从 北京 到 上海 的 中铺 火车票,价格:66
    使用缓存==>北京-上海
    购买 从 北京 到 上海 的 下铺 火车票,价格:86
    
  • 相关阅读:
    Swift
    Swift
    Swift
    Swift
    获取项目版本号与设置引导页的判断条件
    [iOS]简单的APP引导页的实现 (Swift)
    iOS
    文顶顶 iOS开发UI篇—UITabBarController简单介绍 iOS开发UI篇—UITabBarController简单介绍
    Swift开源项目精选
    Fuel 5.1安装openstack I版本号环境
  • 原文地址:https://www.cnblogs.com/milovetingting/p/12329525.html
Copyright © 2020-2023  润新知