设计模式之观享元模式
Flyweight模式也叫享元模式,是构造模式之一,它通过与其他类似对象共享数据减小内存占用。
抽象享元角色:
所有具体提享元类的父类,规定一些需要实现的公共接口。
具体享元角色:
抽象享元角色的具体提实现类,并实现了抽象享元角色规定的方法。
享元工厂角色:
负责创建和管理享元角色。
具体角色MyCharacter:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package com.Design.Flyweight; 2 3 /** 4 * @ClassName: MyCharacter 5 * @Description: 具体享元角色 6 * @author 7 * @date 2018年3月31日 下午7:45:39 8 * @version 1.0 9 */ 10 public class MyCharacter { 11 12 private char mychar; 13 14 15 public MyCharacter(char mychar) { 16 this.mychar = mychar; 17 18 } 19 20 public void display() { 21 System.out.println(mychar); 22 } 23 24 25 }
享元工厂类MyCharacterFactory:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package com.Design.Flyweight; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 /** 7 * @ClassName: MyCharacterFactory 8 * @Description: 享元工厂 9 * @author 10 * @date 2018年3月31日 下午7:46:37 11 * @version 1.0 12 */ 13 public class MyCharacterFactory { 14 15 private Map<Character, MyCharacter> pool; 16 17 public MyCharacterFactory() { 18 pool = new HashMap<Character, MyCharacter>(); 19 } 20 21 22 public MyCharacter getMyCharacter(Character character){ 23 MyCharacter myChar = pool.get(character); 24 if(myChar == null){ 25 myChar = new MyCharacter(character); 26 pool.put(character, myChar); 27 } 28 return myChar; 29 } 30 31 32 33 }
这里,没有抽象享元角色。
其实,就是工厂类里,集合装了存了某一个具体享元角色,在声明周期内,该具体角色都会存在。链接数据库的数据源估计就是享元模式实现的。