隨筆 - 117  文章 - 72  trackbacks - 0

          聲明:原創(chuàng)作品(標(biāo)有[原]字樣)轉(zhuǎn)載時(shí)請(qǐng)注明出處,謝謝。

          常用鏈接

          常用設(shè)置
          常用軟件
          常用命令
           

          訂閱

          訂閱

          留言簿(7)

          隨筆分類(130)

          隨筆檔案(123)

          搜索

          •  

          積分與排名

          • 積分 - 155904
          • 排名 - 389

          最新評(píng)論

          [關(guān)鍵字]:java,design pattern,設(shè)計(jì)模式,《Java與模式》學(xué)習(xí),閻宏,Ph.D,Flyweight Pattern,享元模式
          [環(huán)境]:StarUML5.0 + JDK6
          [作者]:Winty (wintys@gmail.com) http://wintys.blogjava.net
          [正文]:

          一個(gè)有外蘊(yùn)狀態(tài)的單純享元例子:咖啡屋(Coffee Shop)

          package pattern.flyweight.coffee.shop;

          import java.util.*;
          /**
           * 一個(gè)有外蘊(yùn)狀態(tài)的單純享元例子
           * 咖啡屋:Coffee Shop
           * @version 2009-6-25
           * @author Winty(wintys@gmail.com)
           */
          public class CoffeeShopTest{
              public static void main(String[] args){
                  FlavorFactory f = FlavorFactory.getInstance();
                  
                  Table t1,t2;
                  t1 = new Table(101);
                  t2 = new Table(102);

                  Order o1,o2,o3;
                  o1 =f.factory("Black Coffee");
                  o2 = f.factory("Espresso");
                  o3 = f.factory("Black Coffee");

                  o1.serve(t1);
                  o2.serve(t1);
                  o3.serve(t2);

                  f.checkFlyweight();
              }
          }

          /**
           * 抽象享元角色
           */
          abstract class Order{
              public abstract void serve(Table table);
              public abstract String getFlavor();
          }

          /**
           * 具體享元角色
           */
          class Flavor extends Order{
              private String flavor;//內(nèi)蘊(yùn)狀態(tài)

              public Flavor(String flavor){
                  this.flavor = flavor;
              }

              @Override
              public void serve(Table table){
                  System.out.println("serve " + flavor + " to " + table.getNum());
              }

              @Override
              public String getFlavor(){
                  return flavor;
              }
          }


          /**
           * 享元工廠:使用單例模式實(shí)現(xiàn)
           */
          class FlavorFactory{
              private static FlavorFactory f = new FlavorFactory();
              private Map<String , Order> map;

              public FlavorFactory(){
                  map = new HashMap<String , Order>();
              }

              public static FlavorFactory getInstance(){
                  return f;
              }

              public Order factory(String flavor){
                  Order order = null;
                  if(map.containsKey(flavor)){
                      order = map.get(flavor);
                  }
                  else{
                      order = new Flavor(flavor);
                      map.put(flavor , order);
                  }

                  return order;
              }


              /**
               * 輔助方法
               */
              public void checkFlyweight(){
                  Iterator<Map.Entry<String , Order>> it
                      = map.entrySet().iterator();
                  System.out.println(""ncheck flyweight:");
                  while(it.hasNext()){
                      Map.Entry<String , Order> entry = it.next();
                      String key = entry.getKey();
                      System.out.println("key:" + key);
                  }
              }
          }

          /**
           * 外蘊(yùn)狀態(tài)類
           */
          class Table{
              private int num;

              public Table(int num){
                  setNum(num);
              }

              public int getNum(){
                  return num;
              }

              public void setNum(int num){
                  this.num = num;
              }
          }


          運(yùn)行結(jié)果:
          serve Black Coffee to 101
          serve Espresso to 101
          serve Black Coffee to 102

          check flyweight:
          key:Black Coffee
          key:Espresso
          posted on 2009-06-29 23:08 天堂露珠 閱讀(313) 評(píng)論(0)  編輯  收藏 所屬分類: Pattern
          主站蜘蛛池模板: 龙口市| 卫辉市| 武冈市| 新野县| 广灵县| 临澧县| 鄢陵县| 秭归县| 嘉鱼县| 普陀区| 海伦市| 万山特区| 津南区| 达孜县| 南昌县| 永丰县| 馆陶县| 会东县| 辽中县| 郸城县| 黄骅市| 阳新县| 陇南市| 四平市| 林甸县| 米林县| 昭苏县| 辛集市| 湟源县| 沧源| 澄江县| 夏河县| 余庆县| 旺苍县| 巴南区| 灌云县| 浮山县| 乐至县| 黄冈市| 崇礼县| 富源县|