<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
    主站蜘蛛池模板: 亚洲av永久无码| 久久久久亚洲AV片无码下载蜜桃| 亚洲人妖女同在线播放| 无码AV片在线观看免费| 国产亚洲日韩在线三区| 久久毛片免费看一区二区三区| 国产无遮挡色视频免费视频| 亚洲欧洲精品成人久久曰| 精品少妇人妻AV免费久久洗澡| 亚洲精品国产摄像头| 又粗又硬免费毛片| 黄页免费视频播放在线播放| 亚洲国产免费综合| 三级网站在线免费观看| 亚洲AV永久无码精品成人| 久久精品国产大片免费观看| 亚洲色大成网站www永久| 无码人妻一区二区三区免费手机 | 黄瓜视频影院在线观看免费| 亚洲一欧洲中文字幕在线| 在线播放免费播放av片| 免费播放美女一级毛片| 亚洲乱码一区二区三区在线观看| 国产综合免费精品久久久| 亚洲视频精品在线| 成人免费无毒在线观看网站| 最新亚洲人成网站在线观看| 中文字幕亚洲一区二区va在线| 麻豆精品成人免费国产片| 亚洲一区动漫卡通在线播放| 日本一区二区三区日本免费| 久久久久久噜噜精品免费直播| 亚洲视频一区在线观看| 免费一级毛片在级播放| 久久国产乱子精品免费女| 国产亚洲精品成人AA片| 亚洲精品乱码久久久久久按摩| 一本岛高清v不卡免费一三区| 一级毛片大全免费播放| 亚洲成A∨人片在线观看无码| 婷婷综合缴情亚洲狠狠尤物|