设计模式11——结构型模式——享元模式

1、概念

享元模式是在大量创建相似对象时,将对象的”common state”或”share state”与”internal state”或”special state”分离。将common state封装为一个对象,并共享给所有对象,以此达到节约内存的目的。

它的关键点在于common state与internal state的划分。

2、UML图

3、代码

Novel对象,原始对象

/**
 * 
 * @File Name: Novel.java 
 * @Description: 小说实体类
 * @version 1.0
 * @since JDK 1.8
 */
public class Novel {
	// 小说的名称,不可共享, internal state
	private String name;
	// 小说的作者, 不可共享, internal state
	private String author;
	// 小说的字体,可共享,都是宋体
	private String font;
	// 小说使用的纸张大小,可共享,都是A4纸
	private String paper;
	// get & set省略
}

  现在假设要打印几万册,new几万个这样的对象,此时在内存中会存在上万个Novel对象,而对于font,paper这样的属性数据也会重复几万次。为了节约内存,把这些属性单独封装为一个对象,novel对象在内存中只需要重复”引用地址”即可。

  改造之后的Novel对象

/**
 * 
 * @File Name: Novel.java 
 * @Description: 小说实体类
 * @version 1.0
 * @since JDK 1.8
 */
public class Novel {
	// 小说的名称,不可共享, internal state
	private String name;
	// 小说的作者, 不可共享, internal state
	private String author;
	// 共享属性,font,paper。
	private NovelCommonState commonState;
	// get & set省略
}

  NovelCommonState对象

/**
 * 
 * @File Name: NovelCommonState.java 
 * @Description: 封装Novel实体类的共享属性
 * @version 1.0
 * @since JDK 1.8
 */
public class NovelCommonState {
	// 小说的字体,可共享,都是宋体
	private String font;
	// 小说使用的纸张大小,可共享,都是A4纸
	private String paper;
}

  此时上万个Novel对象中保存的是commonState引用,NovelCommonState只创建了一次,节约了内存空间。

4、讨论

问题1:谈谈对享元模式的理解?

答:享元模式的核心思想在于解决重复性导致的资源浪费。它的关键点有两个:

  1. 将重复的,可共享的与独有的,不可共享的相分离。在创建对象这个过程中是分离公共属性和私有属性。
  2. 资源。在创建对象这个过程中节约了内存。

5、示例

其实在生活中这种示例随处可见,例如用户共用电表,水表等等。在编程领域的示例有:

  • 游戏领域中的小怪,dota2或LOL中的小兵
  • 平台的智能机器人。
  • 直播平台的机器人账号。
posted @ 2018-11-10 22:26  蜗牛旅行1899  阅读(149)  评论(0编辑  收藏  举报