科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件java设计模式之Flyweight(元类)

java设计模式之Flyweight(元类)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

 Flyweight定义:  避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类).

作者:中国IT实验室 来源:中国IT实验室 2007年8月26日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
¡¡Flyweight factory¸ºÔðά»¤Ò»¸öFlyweight³Ø(´æ·ÅÄÚ²¿×´Ì¬),µ±¿Í»§¶ËÇëÇóÒ»¸ö¹²ÏíFlyweightʱ,Õâ¸öfactoryÊ×ÏÈËÑË÷³ØÖÐÊÇ·ñÒѾ­ÓпÉÊÊÓõÄ,Èç¹ûÓÐ,factoryÖ»ÊǼòµ¥·µ»ØËͳöÕâ¸ö¶ÔÏó,·ñÔò,´´½¨Ò»¸öеĶÔÏó,¼ÓÈëµ½³ØÖÐ,ÔÙ·µ»ØËͳöÕâ¸ö¶ÔÏó.³Ø
¡¡¡¡
¡¡¡¡public class FlyweightFactory {
¡¡¡¡¡¡¡¡//Flyweight pool
¡¡¡¡¡¡¡¡private Hashtable flyweights = new Hashtable();
¡¡¡¡
¡¡¡¡¡¡¡¡public Flyweight getFlyweight( Object key ) {
¡¡¡¡
¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡Flyweight flyweight = (Flyweight) flyweights.get(key);
¡¡¡¡
¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡if( flyweight == null ) {
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡//²úÉúеÄConcreteFlyweight
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡flyweight = new ConcreteFlyweight();
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡flyweights.put( key, flyweight );
¡¡¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡return flyweight;
¡¡¡¡¡¡¡¡}
¡¡¡¡}¡¡
¡¡¡¡
¡¡¡¡ÖÁ´Ë,FlyweightģʽµÄ»ù±¾¿ò¼ÜÒѾ­¾ÍÐ÷,ÎÒÃÇ¿´¿´ÈçºÎµ÷ÓÃ:
¡¡¡¡
¡¡¡¡FlyweightFactory factory = new FlyweightFactory();
¡¡¡¡Flyweight fly1 = factory.getFlyweight( "Fred" );
¡¡¡¡Flyweight fly2 = factory.getFlyweight( "Wilma" );
¡¡¡¡......
¡¡¡¡
¡¡¡¡´Óµ÷ÓÃÉÏ¿´,ºÃÏóÊǸö´¿´âµÄFactoryʹÓÃ,µ«°ÂÃî¾ÍÔÚÓÚFactoryµÄÄÚ²¿Éè¼ÆÉÏ.
¡¡¡¡
¡¡¡¡FlyweightģʽÔÚXMLµÈÊý¾ÝÔ´ÖÐÓ¦ÓÃ
¡¡¡¡ÎÒÃÇÉÏÃæÒѾ­Ìáµ½,µ±´óÁ¿´ÓÊý¾ÝÔ´ÖжÁÈ¡×Ö·û´®,ÆäÖп϶¨ÓÐÖظ´µÄ,ÄÇôÎÒÃÇʹÓÃFlyweightģʽ¿ÉÒÔÌá¸ßЧÂÊ,ÒÔ³ªÆ¬CDΪÀý,ÔÚÒ»¸öXMLÎļþÖÐ,´æ·ÅÁ˶à¸öCDµÄ×ÊÁÏ.
¡¡¡¡
¡¡¡¡Ã¿¸öCDÓÐÈý¸ö×Ö¶Î:
¡¡¡¡1.³öƬÈÕÆÚ(year)
¡¡¡¡2.¸è³ªÕßÐÕÃûµÈÐÅÏ¢(artist)
¡¡¡¡3.³ªÆ¬ÇúÄ¿ (title)
¡¡¡¡
¡¡¡¡ÆäÖÐ,¸è³ªÕßÐÕÃûÓпÉÄÜÖظ´,Ò²¾ÍÊÇ˵,¿ÉÄÜÓÐͬһ¸öÑݳªÕߵĶà¸ö²»Í¬Ê±ÆÚ ²»Í¬ÇúÄ¿µÄCD.ÎÒÃǽ«"¸è³ªÕßÐÕÃû"×÷Ϊ¿É¹²ÏíµÄConcreteFlyweight.ÆäËûÁ½¸ö×Ö¶Î×÷ΪUnsharedConcreteFlyweight.
¡¡¡¡
¡¡¡¡Ê×ÏÈ¿´¿´Êý¾ÝÔ´XMLÎļþµÄÄÚÈÝ:
¡¡¡¡
¡¡¡¡<?xml version="1.0"?>
¡¡¡¡<collection>
¡¡¡¡
¡¡¡¡<cd>
¡¡¡¡<title>Another Green World</title>
¡¡¡¡<year>1978</year>
¡¡¡¡<artist>Eno, Brian</artist>
¡¡¡¡</cd>
¡¡¡¡
¡¡¡¡<cd>
¡¡¡¡<title>Greatest Hits</title>
¡¡¡¡<year>1950</year>
¡¡¡¡<artist>Holiday, Billie</artist>
¡¡¡¡</cd>
¡¡¡¡
¡¡¡¡
¡¡¡¡<cd>
¡¡¡¡<title>Taking Tiger Mountain (by strategy)</title>
¡¡¡¡<year>1977</year>
¡¡¡¡<artist>Eno, Brian</artist>
¡¡¡¡</cd>
¡¡¡¡
¡¡¡¡
¡¡¡¡.......
¡¡¡¡
¡¡¡¡</collection>
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章