设计模式之观享元模式

Flyweight模式也叫享元模式,是构造模式之一,它通过与其他类似对象共享数据减小内存占用。

抽象享元角色:

  所有具体提享元类的父类,规定一些需要实现的公共接口。

具体享元角色:

  抽象享元角色的具体提实现类,并实现了抽象享元角色规定的方法。

享元工厂角色:

  负责创建和管理享元角色。

具体角色MyCharacter:

 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 }
View Code

享元工厂类MyCharacterFactory:

 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 }
View Code

这里,没有抽象享元角色。

其实,就是工厂类里,集合装了存了某一个具体享元角色,在声明周期内,该具体角色都会存在。链接数据库的数据源估计就是享元模式实现的。

 

posted @ 2018-03-31 19:49  花雪依蒿  阅读(118)  评论(0编辑  收藏  举报