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

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

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

    AntSoul

    它總是在行走,行走,永遠的行走…… 行走是它生存的恒久姿態和最佳造型。 它似乎有一雙不知疲倦的腳。 ———我說的是螞蟻。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      42 隨筆 :: 0 文章 :: 1 評論 :: 0 Trackbacks
    ?? Creational Pattern是對類的實例化過程的抽象化。一些系統在創建對象時,需要動態的決定怎么樣創建對象,創建那些對象,以及如何組合和表示這些對象。Creational Pattern描述了怎么樣構造和封裝這些動態的決定。
    ??? Creational Pattern分為類的創建模式和對象的創建模式兩種。
    ??? 類的創建模式:???? 類的創建模式使用繼承關系,把類的創建延遲到子類,從而封裝了客戶端將得到的哪些具體類的信息,并且隱 藏了這 類的實例是如何被創建和放到一起的。
    ??? 對象的創建模式: 對象的創建模式是把對象的創建過程動態的委派給另一個對象,從而動態地決定客戶端將得到哪些具體的類的實例,以及這些類的實例是如何被創建和組合在一起的。
    ??? Simple Factory是類的創建模式,又稱為Static Factory Method模式,它是由一個工廠對象決定創造出哪一種產品類的實例。工廠模式負責將大量有共同接口的類實例化。工廠模式可以動態的決定哪一個類實例化,不必事先知道每次要實例化哪一個類。工廠模式有如下的幾種形態
    :
    ● Simple Factory 模式:又叫Static Factory Method.
    ● Factory Method模式:又稱多態工廠(Polymorphic Factory)模式。
    ● Abstract Factory模式:又稱工具箱(Kit或ToolKit)模式。
    簡單工廠模式涉及到工廠角色,抽象產品角色以及具體產品角色等三個角色:
    ● 工廠類(Creator)角色:擔任這個角色的是工廠方法模式的核心,含有與應用緊密相關的商業邏輯。工廠類在客戶端的直接調用下創建產品對象,它往往由一個具體的java類實現。
    ● 抽象產品(Product)角色:擔任這個角色的是由工廠方法模式所創建的對象的父類,或它們共同擁有的接口。抽象產品可以由一個Java接口或Java抽象類實現。
    ● 具體產品(Concrete Product)角色:工廠模式所創建的任何對象都是這個角色的實例,具體產品角色由一個具體的Java類實現。
    demo:
    ?以農場為例子,農場公司專門向市場銷售水果。農場得有專門的園丁來管理水果。
    interface Fruti
    {
    ?//水果的接口
    ?/**
    ?* 生長
    ?*/
    ?void grow();?
    ?
    ?/**
    ?* 收獲
    ?*/
    ?void harvest();
    ?
    ?/**
    ?* 種植
    ?*/
    ?void plant();
    }
    具體的水果:蘋果,葡萄,草莓
    Apple.java:
    class Apple implements Fruit
    {
    ?private int treeAge;?? //蘋果的樹齡
    ?
    ?/**
    ?* 生長
    ?*/
    ?public void grow()
    ?{
    ??log("Apple is growing......");
    ?}
    ?
    ?/**
    ?* 收獲
    ?*/
    ?pubic void harvest()
    ?{
    ??log("Apple has been harvested.");
    ?}
    ?
    ?/**
    ?* 種植
    ?*/
    ?public void plant()
    ?{
    ??log("Apple has been planted");
    ?}
    ?
    ?/**
    ?* 輔助方法
    ?*/
    ?public static void log(String str)
    ?{
    ??System.out.println(str);
    ?}
    ?
    ?/**
    ?* 樹齡的取值方法
    ?*/
    ?public int getTreeAge()
    ?{
    ??return this.treeAge;
    ?}
    ?
    ?/**
    ?* 樹齡的賦值方法
    ?*/
    ?public void setTreeAge(int treeAge)
    ?{
    ??this.treeAge = treeAge;
    ?}
    }

    Grape.java
    class Grape implements Fruit
    {
    ?private boolean seedless;? //葡萄的籽
    ?
    ?/**
    ?* 生長
    ?*/
    ?public void grow()
    ?{
    ??log("Grape is growing.....");
    ?}
    ?
    ?/**
    ?* 收獲
    ?*/
    ?public void harvest()
    ?{
    ??log("Grape has been harveted");
    ?}
    ?
    ?/**
    ?* 種植
    ?*/
    ?public void plant()
    ?{
    ??log("Grape has been planted");
    ?}
    ?
    ?/**
    ?* 輔助方法
    ?*/
    ?public static void log(String msg)
    ?{
    ??System.out.println(msg);
    ?}
    ?
    ?/**
    ?* 有無籽的取值方法
    ?*/
    ?public boolean getSeedless()
    ?{
    ??return this.seedless;
    ?}
    ?
    ?/**
    ?* 有無籽的賦值方法
    ?*/
    ?public void setSeedless(boolean seedless)
    ?{
    ??this.seedless = seedless;
    ?}
    }

    Strawberry.java
    class Strawberry implements Fruit
    {
    ?/**
    ?* 生長
    ?*/
    ?public void grow()
    ?{
    ??log("Strawberry is growing.....");
    ?}
    ?
    ?/**
    ?* 收獲
    ?*/
    ?public void harvest()
    ?{
    ??log("Strawberry has been harvested");
    ?}
    ?
    ?/**
    ?* 種植
    ?*/
    ?public void plant()
    ?{
    ??log("Strawberry has been planted");
    ?}
    ?
    ?/**
    ?* 輔助方法
    ?*/
    ?public static void log(String msg)
    ?{
    ??System.out.println(msg);
    ?}
    }

    具體的園丁:
    public class FruitGradener
    {
    ?/**
    ?* 靜態工廠方法
    ?*/
    ?public static Fruti factory(String witch)throws BadFruitException
    ?{
    ??if(witch.equalsIgnoreCase("apple"))
    ??{
    ???return new Apple();
    ??}
    ??else if(withc.equalsIgnoreCase("Grape"))
    ??{
    ???return new Grape();
    ??}
    ??else if(witch.equalsIgnoreCase("Strawberry"))
    ??{
    ???return new Strawberry();
    ??}
    ??else
    ??{
    ???thow new BasFruitException("Bad fruit request");
    ??}
    ?}
    }

    抽象產品角色的主要目的就是給所有的具體產品提供一個共同的類型,在最簡單的情況下可以簡化為一個標識接口。如:
    public interface Product
    {
    }

    工廠類角色就是創建一個新的具體產品實例返回給調用者。如:
    public class? Creator
    {
    ?? /**
    ?? * 靜態工廠方法
    ?? */
    ??? return new ConreteProduct();
    }

    具體的產品就是實際的對象了,如:
    public class ConreteProduct implemnts Product
    {
    ??? public ConcreteProduct(){}
    }

    如果模式所產生的具體產品類彼此之間沒有共同的商業邏輯,那么抽象產品可以由一個JAVA接口扮演,如果有共同的商務邏輯則應當使用抽象角色扮演。這樣共同的邏輯都放到抽象類里去了,達到共享的目的。
    posted on 2007-03-31 10:53 yok 閱讀(187) 評論(0)  編輯  收藏 所屬分類: CoreJava
    主站蜘蛛池模板: 亚洲熟妇无码爱v在线观看| 亚洲av午夜精品一区二区三区| 亚洲日本中文字幕一区二区三区| 亚洲中文字幕久久久一区| 国产h肉在线视频免费观看| 97亚洲熟妇自偷自拍另类图片| 成人黄网站片免费视频 | 毛片高清视频在线看免费观看| 亚洲精品91在线| 国产又大又粗又长免费视频| 久久亚洲精品无码aⅴ大香 | 日本一道一区二区免费看| 亚洲kkk4444在线观看| 免费做爰猛烈吃奶摸视频在线观看| 亚洲日韩乱码中文无码蜜桃 | 另类专区另类专区亚洲| 免费观看午夜在线欧差毛片| 国产成人 亚洲欧洲| 免费**毛片在线播放直播 | a级午夜毛片免费一区二区| 久久精品亚洲综合专区| 国产成人久久AV免费| 亚洲最大黄色网址| 四虎成人免费网址在线| 美女视频黄a视频全免费网站色| 亚洲视频在线精品| 99在线免费观看视频| 中中文字幕亚洲无线码| 免费很黄很色裸乳在线观看| 久草免费福利在线| 久久久亚洲裙底偷窥综合| 曰批全过程免费视频在线观看| 亚洲AV无码一区二区三区网址| 亚洲一区二区三区在线播放| 大地资源在线资源免费观看 | 久久这里只有精品国产免费10| 亚洲国产成人AV在线播放| 久久亚洲精品无码播放| 最近免费字幕中文大全视频| 久久精品亚洲日本波多野结衣| 国产精品亚洲A∨天堂不卡|