设计模式之享元模式

 享元模式 的定义为:采用一个共享类来避免大量拥有相同内容的“小类”的开销。由此看来享元模式的主要的目的还是节省资源,主要是内存资源,感觉有点像单例。
享元模式的组成部分:
1)  抽象享元角色:为具体享元角色规定了必须实现的方法,而外蕴状态就是以参数的形式 通过此方法传入。在  Java  中可以由抽象类、接口来担当。
2)  具体享元角色:实现抽象角色规定的方法。如果存在内蕴状态,就负责为内蕴状态提供 存储空间。
3)  享元工厂角色:负责创建和管理享元角色。要想达到共享的目的,这个角色的实现是关 键!
4)  客户端角色:维护对所有享元对象的引用,而且还需要存储对应的外蕴状态。
例子如下:
 1 package com.cnblogs.ipolaris.Flyweight.test;
 2 /**
 3  * 抽象享元角色
 4  * @author iPolaris
 5  *
 6  */
 7 public interface UpperChar {
 8         public void show();
 9 }
10 
11 package com.cnblogs.ipolaris.Flyweight.test;
12 /**
13  * 具体享元角色
14  * @author iPolaris
15  *
16  */
17 public class MyUpper implements UpperChar {
18         char upperc ;
19         public MyUpper(char c){
20                this .upperc = ( char)(c-32);
21        }
22         @Override
23         public void show() {
24               System. out .println(upperc );
25        }
26 
27 }
28 
29 
30 package com.cnblogs.ipolaris.Flyweight.test;
31 
32 import java.util.HashMap;
33 import java.util.Map;
34 /**
35  * 享元工厂角色
36  * @author iPolaris
37  *
38  */
39 public class FlyweightFactory {
40         private Map<Character, MyUpper> uppers ;
41         public FlyweightFactory(){
42                uppers = new HashMap<Character, MyUpper>();
43        }
44        
45         public MyUpper getUpper(Character c){
46               MyUpper mychar = uppers.get(c);
47                if (mychar == null){
48                      mychar  = new MyUpper(c);
49                       uppers.put(c, mychar);
50               }
51                return mychar;
52        }
53 }
54 
55 package com.cnblogs.ipolaris.Flyweight.test;
56 
57 public class Test {
58 
59 
60         public static void main(String[] args) {
61               FlyweightFactory factory = new FlyweightFactory();
62               MyUpper uppera1 = factory.getUpper( 'a');
63               MyUpper uppera2 = factory.getUpper( 'a');
64 
65               uppera1.show();
66               uppera2.show();
67               System. out .println(uppera1 == uppera2);
68        }
69 
70 }
运行结果为:
A
A
true
uppera1和uppera2是一个对象,由此达到了数据共享节省内存的目的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值