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

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

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

    posts - 51, comments - 17, trackbacks - 0, articles - 9
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    java模式之工廠模式

    Posted on 2007-03-29 13:18 chenweicai 閱讀(287) 評論(0)  編輯  收藏

    簡單工廠模式(缺點:每增加一個具體產品時 ,就要修改工廠方法,工廠方法負責了所有具體產品的創建)

    舉個例子:
    ------------------
    public interface Fruit {

    ?void grow();
    ?
    ?void harvest();
    ?
    ?void plant();
    }
    -------------------
    public class Apple implements Fruit {

    ?private int treeAge;
    ?
    ?public void grow() {
    ??// TODO Auto-generated method stub
    ??System.out.println("Apple is growing...");
    ??
    ?}

    ?public void harvest() {
    ??// TODO Auto-generated method stub
    ??System.out.println("Apple has been harvested.");
    ?}

    ?public void plant() {
    ??// TODO Auto-generated method stub
    ??System.out.println("Apple has been planted.");
    ??
    ?}

    ?public int getTreeAge() {
    ??return treeAge;
    ?}

    ?public void setTreeAge(int treeAge) {
    ??this.treeAge = treeAge;
    ?}
    ?
    }
    -------------------
    public class Grape implements Fruit {

    ?private boolean seedless;
    ?
    ?
    ?
    ?public boolean isSeedless() {
    ??return seedless;
    ?}

    ?public void setSeedless(boolean seedless) {
    ??this.seedless = seedless;
    ?}

    ?public void grow() {
    ??// TODO Auto-generated method stub
    ??System.out.println("Grape is growing...");
    ?}

    ?public void harvest() {
    ??// TODO Auto-generated method stub
    ??System.out.println("Grape has been harvested.");
    ?}

    ?public void plant() {
    ??// TODO Auto-generated method stub
    ??System.out.println("Grape has been planted.");
    ??
    ?}

    ?
    }


    ---------------------------
    public class Strawberry implements Fruit {

    ?public void grow() {
    ??// TODO Auto-generated method stub
    ??System.out.println("Strawberry is growing...");
    ?}

    ?public void harvest() {
    ??// TODO Auto-generated method stub
    ??System.out.println("Strawberry has been harvested.");
    ?}

    ?public void plant() {
    ??// TODO Auto-generated method stub
    ??System.out.println("Strawberry has been planted.");
    ?}
    }

    -------------------------
    public class FruitGardener {

    ?//靜態工廠方法
    ?public static Fruit factory(String which) throws BadFruitException{
    ??if(which.equalsIgnoreCase("apple")){
    ???return new Apple();
    ??}
    ??else if(which.equalsIgnoreCase("strawberry")){
    ???return new Strawberry();
    ??}
    ??else if(which.equalsIgnoreCase("grape")){
    ???return new Grape();
    ??}
    ??else{
    ???throw new BadFruitException("Bad fruit request");
    ??}
    ?}
    }

    ---------------------------
    public class BadFruitException extends Exception {

    ?public BadFruitException(String msg){
    ??super(msg);
    ?}
    }


    --------------------------
    public class Client {

    ?public static void main(String[] args){
    ??
    ??try{
    ???Fruit apple = (Fruit)FruitGardener.factory("Apple");
    ???System.out.println("apple is class: " + apple.getClass().getName());
    ???apple.plant();
    ???apple.grow();
    ???apple.harvest();
    ???System.out.println();
    ???
    ???Fruit grape = (Fruit)FruitGardener.factory("grape");
    ???System.out.println("grape is class: " + grape.getClass().getName());
    ???grape.plant();
    ???grape.grow();
    ???grape.harvest();
    ???System.out.println();
    ???
    ???Fruit strawberry = (Fruit)FruitGardener.factory("strawberry");
    ???System.out.println("strawberry is class: " + strawberry.getClass().getName());
    ???strawberry.plant();
    ???strawberry.grow();
    ???strawberry.harvest();
    ???
    ??}catch(BadFruitException e){
    ???e.printStackTrace();
    ??}
    ?}
    }


    2 工廠方法模式:解決了簡單工廠模式的缺點, 將每一個具體產品的創建工作交給對應的具體工廠角色去解決

    舉個例子:
    ---------------------
    public interface FruitGardener {

    ?public Fruit factory();
    }


    ---------------------

    public class AppleGardener implements FruitGardener{

    ?public Fruit factory() {
    ??return new Apple();
    ?}
    }

    -----------------

    public class GrapeGardener implements FruitGardener{

    ?public Fruit factory() {
    ??return new Grape();
    ?}
    }


    ----------------------

    public class StrawGardener implements FruitGardener{

    ?public Fruit factory() {
    ??return new Strawberry();
    ?}
    }

    -----------------
    public class Client {

    ?private static FruitGardener applegardener, grapegardener, strawgardener;
    ?private static Fruit apple, grape, strawberry;
    ?
    ?public static void main(String[] args){
    ??applegardener = new AppleGardener();
    ??apple = applegardener.factory();
    ??System.out.println("apple is class: " + apple.getClass().getName());
    ??apple.plant();
    ??apple.grow();
    ??apple.harvest();
    ??System.out.println();
    ??
    ??grapegardener = new GrapeGardener();
    ??grape = grapegardener.factory();
    ??System.out.println("grape is class: " + grape.getClass().getName());
    ??grape.plant();
    ??grape.grow();
    ??grape.harvest();
    ??System.out.println();

    ??strawgardener = new StrawGardener();
    ??strawberry = strawgardener.factory();
    ??System.out.println("strawberry is class: " + strawberry.getClass().getName());
    ??strawberry.plant();
    ??strawberry.grow();
    ??strawberry.harvest();
    ?}
    }


    3 抽象工廠模式:解決多產品簇問題

    舉個例子:

    -------------------
    public interface Fruit {

    //?public String getName();
    }

    public class NorthernFruit implements Fruit{

    ?private String name;

    ?public String getName() {
    ??return name;
    ?}

    ?public void setName(String name) {
    ??this.name = name;
    ?}

    ?public NorthernFruit(String name) {
    ??super();
    ??// TODO Auto-generated constructor stub
    ??this.name = name;
    ?}
    ?
    ?
    }



    public class TropicalFruit implements Fruit{

    ?private String name;

    ?public String getName() {
    ??return name;
    ?}

    ?public void setName(String name) {
    ??this.name = name;
    ?}

    ?public TropicalFruit(String name) {
    ??super();
    ??// TODO Auto-generated constructor stub
    ??this.name = name;
    ?}
    ?
    ?
    }



    public interface Veggie {

    }


    public class TropicalVeggie implements Veggie{
    ?
    ?private String name;

    ?public String getName() {
    ??return name;
    ?}

    ?public void setName(String name) {
    ??this.name = name;
    ?}

    ?public TropicalVeggie(String name) {
    ??super();
    ??// TODO Auto-generated constructor stub
    ??this.name = name;
    ?}
    ?
    ?

    }


    public class NorthernVeggie implements Veggie{

    ?private String name;

    ?public String getName() {
    ??return name;
    ?}

    ?public void setName(String name) {
    ??this.name = name;
    ?}

    ?public NorthernVeggie(String name) {
    ??super();
    ??// TODO Auto-generated constructor stub
    ??this.name = name;
    ?}
    ?
    ?
    }

    -------------------------

    public interface Gardener {

    ?public Fruit createFruit(String name);
    ?
    ?public Veggie createVeggie(String name);
    }

    public class NorthernGardener implements Gardener {

    ?public Fruit createFruit(String name) {
    ??return new NorthernFruit(name);
    ?}

    ?public Veggie createVeggie(String name) {
    ??return new NorthernVeggie(name);
    ?}

    ?
    }



    public class TropicalGardener implements Gardener {

    ?public Fruit createFruit(String name) {
    ??return new TropicalFruit(name);
    ?}

    ?public Veggie createVeggie(String name) {
    ??return new TropicalVeggie(name);
    ?}

    ?
    }


    public class Client {

    ?private static Gardener tropicalgardener ,northerngardener;
    ?private static Fruit northernfruit, tropicalfruit;
    ?private static Veggie northernveggie, tropicalveggie;
    ?
    ?public static void main(String[] args){
    ??tropicalgardener = new TropicalGardener();
    ??tropicalfruit = tropicalgardener.createFruit("tropicalfruit");
    ??//System.out.println(tropicalfruit.getName());
    ??tropicalveggie = tropicalgardener.createVeggie("tropicalveggie");
    ??
    ??northerngardener = new NorthernGardener();
    ??northernfruit = northerngardener.createFruit("northernfruit");
    ??northernveggie = northerngardener.createVeggie("northernveggie");
    ?}
    ?
    }


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


    網站導航:
     
    主站蜘蛛池模板: 久久免费高清视频| 亚洲乱码日产精品BD在线观看| 日韩亚洲国产综合高清| 67194熟妇在线永久免费观看| 亚洲AV日韩AV天堂久久| jizz免费观看视频| 亚洲欧洲精品成人久久曰影片| 亚洲色精品三区二区一区| 好吊妞在线新免费视频| 亚洲一区二区三区写真| 国产大片线上免费看| 国产成人亚洲综合在线| 亚洲无码高清在线观看| 国产性生大片免费观看性| 亚洲av无码潮喷在线观看| 久久国产高潮流白浆免费观看| 亚洲无线一二三四区| 大地资源在线观看免费高清 | 中文字幕日韩亚洲| 亚洲高清免费视频| 亚洲美女又黄又爽在线观看| 国产精品免费大片| 亚洲欧洲自拍拍偷综合| 老司机永久免费网站在线观看| 久久久久亚洲国产AV麻豆 | 亚洲一区在线观看视频| 四虎影视免费在线| 一区二区三区视频免费观看| 国产AV无码专区亚洲AV毛网站| 57pao国产成永久免费视频| 亚洲精品无码久久久久秋霞| 亚洲国产精品毛片av不卡在线 | sss在线观看免费高清| 久久久久久久久亚洲| 国产成人A在线观看视频免费 | A片在线免费观看| 亚洲中文字幕人成乱码| 无码欧精品亚洲日韩一区夜夜嗨 | 欧亚一级毛片免费看| 亚洲人成77777在线播放网站| 免费看又黄又无码的网站|