laoding
          本來我以為,隱身了別人就找不到我,沒有用的,像我這樣拉風的男人,無論走到哪里,都像在黑暗中的螢火蟲一樣,那樣的鮮明,那樣的出眾。我那憂郁的眼神,稀疏的胡茬,那微微隆起的將軍肚和親切的笑容......都深深吸引了眾人......
          posts - 0,  comments - 37,  trackbacks - 0

          本實例需要根據植物園的種類確定植物園的布局, 而植物園的種類有很多,對應的植物園布局也各不相同。在這里假設有3種植物園:蔬菜園,一年生植物園,多年生植物園。這3garden中種植的植物各不相同,體現在程序中即返回不同的關于“植物園布局”的對象。生成植物園的布局是我們的目的,如果把蔬菜園、一年生植物園、多年生植物園看作是3個“產品族”,而某一時刻只需要其中一個產品族。由于每個產品族需要一個生產的工廠,所以生產這3個產品族需要3個工廠,分別是蔬菜園工廠(VegieGarden.java),一年生植物園工廠(AnnualGarden.java),多年生植物園工廠(PerennialGarden.java)。由于這3個工廠都是生產植物園的工廠,每個工廠生產的產品又基本相同(都生產“中心布局”、“邊沿布局”、“陰處布局”3個產品),所以可以抽象一個工廠類(Garden.java),這個工廠類也具備生產“中心布局”、“邊沿布局”和“陰處布局”3個產品的能力,而生產的方法由具體的工廠來實現。這樣,再通過一個總控程序(GardenMaker.java)(這個總控程序也可以放到抽象的工廠中)指定需要調用的具體工廠。

          首先來創建Plant.java類,它只有一個name屬性

          public class Plant {
              String name;

              
          public Plant(String name) {        
                  
          this.name = name;
              }

              
          public String getName() {
                  
          return name;
              }
          }


          然后是Garden類,3個方法分別是得到中心處、邊沿處和陰暗處的植物

          public abstract class Garden {
              
          public abstract Plant getCenter();
              
          public abstract Plant getBorder();
              
          public abstract Plant getShade();
          }

          下面是3個工廠類
          /**
           * 一年生植物園工廠
           * 
          @author Heinvo Lee
           *
           
          */
          public class AnnualGarden extends Garden {

              @Override
              
          public Plant getCenter() {
                  
          // TODO Auto-generated method stub
                  return new Plant("Marigold");//萬壽菊
              }
              
              @Override
              
          public Plant getBorder() {
                  
          // TODO Auto-generated method stub
                  return new Plant("Alyssum");//十字花科植物;庭薺
              }

              @Override
              
          public Plant getShade() {
                  
          // TODO Auto-generated method stub
                  return new Plant("Coleus");//薄荷科植物
              }

          }

          /**
           * 常年生植物園工廠
           * 
          @author Heinvo Lee
           *
           
          */
          public class PerennialGarden extends Garden {



              @Override
              
          public Plant getCenter() {
                  
          // TODO Auto-generated method stub
                  return new Plant("Dicentrum");
              }
              
              @Override
              
          public Plant getBorder() {
                  
          // TODO Auto-generated method stub
                  return new Plant("Sedum");//景天屬植物;八寶
              }

              @Override
              
          public Plant getShade() {
                  
          // TODO Auto-generated method stub
                  return new Plant("Astilbe");//落新婦屬植物
              }

          }

          /**
           * 蔬菜園工廠
           * 
          @author Heinvo Lee
           *
           
          */
          public class VegieGarden extends Garden {

              
          public Plant getCenter() {
                  
          return new Plant("Corn");
                  }
              
          public Plant getBorder() {
                  
          return new Plant("Peas");
                  }
              
              
          public Plant getShade() {        
                  
          return new Plant("Broccoli");//花椰菜
                  }

          }

          接下來創建總控類GardenMaker
          public class GardenMaker {
              
          private Garden garden;
              
          public Garden getGarden(String gtype)
              {
                  garden 
          = new VegieGarden(); //default
              if(gtype.equals("Perennial"))
                  garden 
          = new PerennialGarden();
              
          if(gtype.equals("Annual"))
                  garden 
          = new AnnualGarden();
              
          return garden;
              }
          }

          然后是一個測試類了
          public class Main {

              
          /**
               * 
          @param args
               
          */
              
          public static void main(String[] args) {
                  GardenMaker gm
          =new GardenMaker();
                  Garden vg
          =gm.getGarden("Vegie");
                  Garden ag
          =gm.getGarden("Annual");
                  Garden pg
          =gm.getGarden("Perennial");
                  
                  System.out.println(
          "Vegie garden, center: "+vg.getCenter().getName());
                  System.out.println(
          "Vegie garden, border: "+vg.getBorder().getName());
                  System.out.println(
          "Vegie garden, shade: "+vg.getShade().getName());
                  System.out.println(
          "------------------------------------");
                  System.out.println(
          "Annual garden, center: "+ag.getCenter().getName());
                  System.out.println(
          "Annual garden, border: "+ag.getBorder().getName());
                  System.out.println(
          "Annual garden, shade: "+ag.getShade().getName());
                  System.out.println(
          "------------------------------------");
                  System.out.println(
          "Perennial garden, center: "+pg.getCenter().getName());
                  System.out.println(
          "Perennial garden, border: "+pg.getBorder().getName());
                  System.out.println(
          "Perennial garden, shade: "+pg.getShade().getName());
                  
                  
          // TODO Auto-generated method stub

              }

          }

          執行這個測試類,可以在控制臺看到以下效果(我以紅色標紅)

          Vegie garden, center: Corn
          Vegie garden, border: Peas
          Vegie garden, shade: Broccoli
          ------------------------------------
          Annual garden, center: Marigold
          Annual garden, border: Alyssum
          Annual garden, shade: Coleus
          ------------------------------------
          Perennial garden, center: Dicentrum
          Perennial garden, border: Sedum
          Perennial garden, shade: Astilbe

          從這個例子我看出以下:
            GardenMaker gm=new GardenMaker();
            Garden vg=gm.getGarden("Vegie");
            Garden ag=gm.getGarden("Annual");
            Garden pg=gm.getGarden("Perennial");
          上面4句代碼是測試類里面的

          當需要生產某一種植物園的布局時,只需要將植物園的類型告訴總控程序(GardenMaker.java),這里是傳入參數Vegie、Annual、Perennial,總控程序決定使用生產指定類型植物園的工廠生產出需要的“產品族”,而在此過程中,不需要了解具體工廠中的方法是如何實現的。
          posted on 2009-10-14 14:45 老丁 閱讀(355) 評論(0)  編輯  收藏 所屬分類: 設計模式

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          本博客主為學習和復習之用,無關其他,想罵人的繞道
          Email:dkm123456@126.com
          大家一起交流進步
          QQ:283582761


          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          留言簿(4)

          我參與的團隊

          文章分類(50)

          文章檔案(48)

          相冊

          朋友

          搜索

          •  

          積分與排名

          • 積分 - 96532
          • 排名 - 600

          最新評論

          主站蜘蛛池模板: 贵德县| 当雄县| 炉霍县| 连平县| 乐亭县| 昆山市| 博白县| 天等县| 固始县| 昌黎县| 团风县| 靖宇县| 大关县| 灯塔市| 宝鸡市| 呼伦贝尔市| 呼图壁县| 寿光市| 六枝特区| 遵义市| 泰来县| 祁东县| 涿州市| 丹江口市| 山丹县| 车致| 循化| 桐乡市| 衡山县| 普宁市| 武鸣县| 都江堰市| 息烽县| 乐业县| 九江市| 乌兰浩特市| 古田县| 灯塔市| 安康市| 五莲县| 曲沃县|