码迷,mamicode.com
首页 > 其他好文 > 详细

享元模式

时间:2015-04-10 11:05:18      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:

设计模式的意义在于:面向业务内容、业务数据结构和系统架构,高内聚低耦合、优雅的将平面逻辑立体化。

 1 package designPattern;
 2 import java.util.HashMap;
 3 import java.util.Map;
 4 
 5 /**
 6  * 享元模式
 7  * @author Administrator
 8  */
 9 public class B14_FlyWeightTest {
10 
11     /**
12      * 运用共享技术有效地支持大量细粒度的对象。
13      * 适用于:
14      * 1.一个应用程序使用了大量的对象。
15      * 2.完全由于使用大量的对象,造成很大的存储开销。
16      * 3.对象的大多数状态都可变为外部状态。
17      * 4.如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象。
18      * 5.应用程序不依赖于对象标识。由于Flyweight对象可以被共享,对于概念上明显有别的对象,标识测试将返回真值。
19      */
20     public static void main(String[] args) {
21         Flyweight f1 = FlyweightFactory.getFlyweight("a");
22         f1.action(1);
23 
24         Flyweight f2 = FlyweightFactory.getFlyweight("a");
25         f2.action(2);
26 
27         Flyweight f3 = FlyweightFactory.getFlyweight("b");
28         f3.action(3);
29 
30         Flyweight f4 = FlyweightFactory.getFlyweight("c");
31         f4.action(4);
32 
33         Flyweight f5 = FlyweightFactory.getFlyweight("d");
34         f5.action(5);
35 
36         Flyweight f6 = FlyweightFactory.getFlyweight("e");
37         f6.action(6);
38         System.out.println("size:" + FlyweightFactory.getSize());
39     }
40 }
41 //1.Flyweight 描述一个接口,通过这个接口flyweight可以接受并作用于外部状态。
42 interface Flyweight
43 {
44     void action(int i);
45 }
46 // 2.ConcreteFlyweight 实现Flyweight接口,并为内部状态(如果有的话)增加存储空间。
47 //ConcreteFlyweight对象必须是可共享的。它所存储的状态必须是内部的;即,它必须独立于ConcreteFlyweight对象的场景。
48 class FlyweightImpl implements Flyweight
49 {
50     public void action(int i) {
51         System.out.println(i);
52     }    
53 }
54 //3.UnsharedConcreteFlyweight 并非所有的Flyweight子类都需要被共享。Flyweight接口使共享成为可能,但它并不强制共享。
55 //在Flyweight对象结构的某些层次,UnsharedConcreteFlyweight对象通常将ConcreteFlyweight对象作为子节点。
56 class UnsharedFlyweightImpl implements Flyweight
57 {
58     public void action(int i) {
59         System.out.println(i);
60     }    
61 }
62 // 4.FlyweightFactory 创建并管理flyweight对象。
63 //确保合理地共享flyweight。当用户请求一个flyweight时,FlyweightFactory对象提供一个已创建的实例或者创建一个(如果不存在的话)。
64 class FlyweightFactory
65 {
66     @SuppressWarnings("rawtypes")
67     private static Map flyweights=new HashMap();
68     @SuppressWarnings("unchecked")
69     public FlyweightFactory(String s) {
70         flyweights.put(s, new FlyweightImpl());
71     }    
72     @SuppressWarnings("unchecked")
73     public static Flyweight getFlyweight(String key)
74     {
75         if (flyweights.get(key)==null) {
76             flyweights.put(key, new FlyweightImpl());
77         }
78         return (Flyweight) flyweights.get(key);
79     }
80     public static int getSize()
81     {
82         return flyweights.size();        
83     }
84 }

 

环境:JDK1.6,MAVEN,tomcat,eclipse

源码地址:http://files.cnblogs.com/files/xiluhua/designPattern.rar

欢迎亲们评论指教。

享元模式

标签:

原文地址:http://www.cnblogs.com/xiluhua/p/4413793.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!