zoukankan      html  css  js  c++  java
  • 设计模式之享元模式(结构型)

    模式定义

    享元模式(Flyweight Pattern)就是通过共享技术实现大量细粒度对象的复用。享元模式是通过细粒度对象的共享,所以也可以说享元模式是一种轻量级模式。按照Gof模式分类,享元模式属于对象结构型模式。

    模式解释

    • 可以共享的内容称为内部状态(Intrinsic State),需要外部环境设置的不能共享的内容称为外部状态(Extrinsic State)。享元模式需要创建一个享元工厂负责维护享元池(Flyweight Pool),享元池用于存储具有相同内部状态的享元对象。

    • 享元模式中共享的仅仅是享元对象,外部状态是需要通过环境类设置的,在实际使用中,能共享的内部状态不是很多的,所以设计享元对象是比较小的,也就是细粒度对象,所以说享元模式就是通过共享技术实现大量细粒度对象的复用

    • 创建大量对象会一定程度影响系统性能,不方便程序阅读,使用享元模式可以减少对象使用。

    模式角色

    享元模式包括下面角色

    • Flyweight:抽象享元类

    • ConcreteFlyweight:具体享元类

    • UnsharedConcreteFlyweight:非分享具体享元类

    • FlyweightFactory:享元工厂类

    享元模式的核心在享元工厂类,享元工厂类的作用在与维护享元池,需要什么对象,可以从享元池获取

    典型例子

    例子来自:《设计模式》一书

    public class Flyweight
    {
            //内部状态作为成员属性
    	private String intrinsicState;
    	
    	public Flyweight(String intrinsicState)
    	{
    		this.intrinsicState = intrinsicState;
    	}
    	
    	public void operation(String extrinsicState)
    	{
    		......
    	}	
    }
    
    
    public class FlyweightFactory
    {
    	private HashMap flyweights = new HashMap();
    	
    	public Flyweight getFlyweight(String key)
    	{
    		if(flyweights.containsKey(key))
    		{
    		   //享元池有对象,直接获取
    			return (Flyweight)flyweights.get(key);
    		}
    		else
    		{
    		    //创建具体的享元对象,存储在享元池
    			Flyweight fw = new ConcreteFlyweight();
    			flyweights.put(key,fw);
    			return fw;
    		}
    	}
    } 
    
    

    模式应用

    • JDK类库中的String类使用了享元模式
      ...

    模式分类

    享元模式分为单存享元模式和复合享元模式

    • 单纯享元模式:在单纯享元模式中不存在非共享具体单元,所有的具体享元类对象都是可以共享的。
    • 复合享元模式:通过复合模式将单纯享元模式进行组合,形成复合享元对象
  • 相关阅读:
    jQuery.messager 使用
    对应后台传json ajax 获取值判断
    easyui datagrid nowrap 使用方法
    easyui combogrid setValues
    去除字符串中所有的逗号
    datagrid loadData 使用方法
    使用git下载一个项目
    java中读取文本文件的时候@Test方法中没有中文乱码,但是@Controller中却有中文乱码
    IDEA启动项目的时候,控制台中显示的都是乱码
    微信流量主点击量与曝光量是什么意思
  • 原文地址:https://www.cnblogs.com/mzq123/p/10224681.html
Copyright © 2011-2022 走看看