<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 老丁 閱讀(351) 評論(0)  編輯  收藏 所屬分類: 設計模式

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


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


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

    留言簿(4)

    我參與的團隊

    文章分類(50)

    文章檔案(48)

    相冊

    朋友

    搜索

    •  

    積分與排名

    • 積分 - 96425
    • 排名 - 600

    最新評論

    主站蜘蛛池模板: 亚洲精品无码你懂的网站| 亚洲av无码一区二区三区乱子伦| 另类专区另类专区亚洲| 久久久青草青青国产亚洲免观| 最好免费观看高清在线| 亚洲乱码在线卡一卡二卡新区| 亚洲精品tv久久久久久久久久| 曰批视频免费40分钟试看天天| 羞羞视频免费观看| 亚洲美女aⅴ久久久91| 日本一道本高清免费| 成人片黄网站色大片免费观看APP| 久久精品国产亚洲αv忘忧草| 亚洲国模精品一区| 性做久久久久久久免费看| 日韩电影免费在线观看网站| 亚洲乱码在线卡一卡二卡新区| 亚洲无人区一区二区三区| 手机在线免费视频| 无码av免费一区二区三区| 亚洲熟妇无码AV| 国产AV无码专区亚洲AV男同| 日韩特黄特色大片免费视频| 国产精品视频白浆免费视频| 看一级毛片免费观看视频| 亚洲电影免费观看| 亚洲AV无码一区二区二三区软件| 国产片免费福利片永久| 亚洲性线免费观看视频成熟| 免费无码黄网站在线看| 色屁屁www影院免费观看视频| 亚洲成人高清在线观看| 亚洲av无码片在线播放| 亚洲成AV人在线观看网址| 免费在线观看的网站| 99在线热视频只有精品免费| 在线观看免费黄网站| 美女视频黄a视频全免费网站色 | 亚洲另类激情综合偷自拍| 亚洲色一色噜一噜噜噜| 国产成人免费a在线资源|