首 页文章中心下载中心动画频道客户留言泉州论坛资讯中心游戏中心繁體中文
设为首页
加入收藏
联系我们
您当前的位置:今日下载站 -> ASP/PHP/.NET/XML -> 文章内容-> 共同的天空(flyweight) 退出登录 用户管理
栏目导航
· 办公自动化 · 软件工程
· Java/J2EE/JSP · VC++/C#/C
· Visual Basic · Delphi/Perl
· ASP/PHP/.NET/XML · PowerBuilder
· SQL Server/My SQL · Oracle
· Access · DB2/FOXPRO
· Windows · Linux
· Unix · CorelDRAW
· AutoCAD/Firework · Photoshop
· Dreamweaver · Flash/3DS Max
· 网页特效 · 安全防护
热门文章
相关文章
· [图文] 超炫效..
· [图文] 实用教..
· [图文] 独家视..
· [图文] 用历史..
· [图文] Photo..
· [图文] 用两个..
· [图文] photo..
· [图文] 菜鸟学..
· [图文] Photo..
· [图文] 菜鸟扣..

共同的天空(flyweight)

作者:佚名  来源:本站整理  发布时间:2006-12-22 12:58:46  发布人:今日下载站

减小字体 增大字体

 

很多情况下.大量的类似之处使得我们不得不为重复的数据使用少的可怜的内存.这样

的情况很糟糕.既然如此.我们必须找到一个好的办法.把那些可能重复的数据统一管理

这样是在合理不过的事情了.好的..我们应该从如下几个方面来考虑.首先要找出对象之

间的共同之处.这部分是可以共享.那么就需要封装到一个类中.那么剩下的不能共享的

就只好封装到另外的类中.换句话说.就是把对象的粒度扩大.让FlyWeight来控制原本

可能多个小粒度的对象.并把可共享的地方共享.形成统一管理.而可共享的部分必须

动态产生.显然是要用到Factory模式.这也就是FlyWeight很多情况都利用了厂模式.

并且工厂维护着一个共享池.这个池的作用就是为了使得.客户程序能充实际内存中

读取共享数据.如果客户搜索到数据.那么就返回一个共享对象.如果没有找到.那么就

加入到这个共享池中.
abstract class Flyweight
{
   abstract public void Execute( OtherData oData );
}

下面考虑一个可能遇到的问题.假如某个出版社.的数据库是这样的

书号 作者 出版日期  价格

那么这里除了书号以外都又可能出现很大的重复.为了使内存减小投入我们可以考虑使用

FlyWeight模式.

public class Book{
   private int bookNum;
   private string  Author;
   private DateTime pubDate;
   private float  price;
   public void Execute(){}
}

由此可以看出.Book中的大部分数据都又可能重复.那样会浪费很多的内存.那么我们来进行又效

的共享管理.

public class AuthorFlyWeight : FlyWeight{
    private string author;
    public string Author{
          get{return author;}
          set{author=value;}
    }
}

public class pubDateFlyWeight : FlyWeight{
    private DateTime pubDate;
    public DateTime PubDate{
          get{return pubDate;}
          set{pubDate=value;}
    }
}

public class PriceFlyWeight : FlyWeight{
    private float price;
    public float  Price{
          get{return price;}
          set{price=value;}
    }
}

//抽象工厂
abstract class FlyweightFactory{
  //存储数据
   protect Hashtable pool = new Hashtable();
 
  public abstract Flyweight getFlyweight(string key){
}
}


public class AuthorFactory:FlyweightFactory{
   public override Flyweight getFlyweight(string key){
           AuthorFlyWeight reValue;
           reValue = (AuthorFlyWeight)pool.get(key);
    
    if(reValue == null) {
      reValue = new AuthorFlyWeight();
      pool.put(key,reValue);
      
    }
    return reVale;

}
}


后面与之类似..那么FlyWight模式我就介绍到这里....


本文地址:http://www.newbooks.com.cn/info/25622.html
[] [返回上一页] [打 印] [收 藏]
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论…]
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 管理登录
Copyright © 2002-2006 cntoday.com.cn. All Rights Reserved .
Powered by:NewAsp SiteManageSystem Version 2.1 SP1 1030