首页 > 新闻系统 > 编程天地 > 文章正文

Flyweight模式基础了解

2008-04-18 08:52:06 来源:中国自学编程网 作者:佚名 点击:
抽象享元(Flyweight)角色:此角色是所有的具体享元类的超类,为这些类规定出需要实现的公共接口。那些需要外蕴状态(External State)的操作可以通过调用商业方法以参数形式传入。

 {      public void cooking(String foodName)     {         System.out.println("cooking----"+foodName);      } } public class FlyWeightFactoy 

{     private Hashtable<String, FlyWeight> storage = new Hashtable<String, FlyWeight>();  
  public FlyWeight getFood(String key)     {        FlyWeight food = (FlyWeight) storage.get(key);                   if ( food == null )        {                food = new Food();                storage.put( key, food);           }                  return food;     } } public class TestFlyWeight {     public static void main(String[] args)     {         FlyWeightFactoy factory = new FlyWeightFactoy();         People people = new Kitchener();         FlyWeight meal = factory.getFood("Meal");         meal.setFoodName("Meal");         meal.buy(people);       }  } 

享元模式应当在什么情况下使用 
当以下所有的条件都满足时,可以考虑使用享元模式: 
一个系统有大量的对象。 
这些对象耗费大量的内存。 
这些对象的状态中的大部分都可以外部化。 
这些对象可以按照内蕴状态分成很多的组,当把外蕴对象从对象中剔除时,每一个组都可以仅用一个对象代替。 
软件系统不依赖于这些对象的身份,换言之,这些对象可以是不可分辨的。 
满足以上的这些条件的系统可以使用享元对象。 

最后,使用享元模式需要维护一个记录了系统已有的所有享元的表,而这需要耗费资源。因此,应当在有足够多的享元实例可供共享时才值得使用享元模式。 
享元模式的优点和缺点: 
享元模式的优点在于它大幅度地降低内存中对象的数量。但是,它做到这一点所付出的代价也是很高的: 

享元模式使得系统更加复杂。为了使对象可以共享,需要将一些状态外部化,这使得程序的逻辑复杂化。 
享元模式将享元对象的状态外部化,而读取外部状态使得运行时间稍微变长。
9 7 3 1 2 3 4 8 :

精彩推荐
焦点大图推荐
本类热门文章

论坛美图

广告联系 | 版权说明 | 意见建议 | 加入收藏 | 军网站群 [ 军软件园 - 军软件商城 - 军软件园论坛 ]

电信与信息服务业务经营许可证:京ICP证050203