最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java設(shè)計模式筆記之抽象工廠代碼示例

 更新時間:2017年10月31日 16:13:37   作者:拍碼屁  
這篇文章主要介紹了Java設(shè)計模式筆記之抽象工廠代碼示例,見解獨到,代碼詳細(xì),具有一定參考價值,需要的朋友可以了解下。

上一篇說到了工廠模式,那么學(xué)習(xí)了工廠模式,抽象工廠也得學(xué)習(xí)一下。實際上,抽象工廠模式實際上就是在工廠模式的基礎(chǔ)上再嵌套一層工廠模式而已,通過父工廠制造子工廠。只是,也并不完全是嵌套一層,各個工廠會被抽象成一個集多個工廠共同點的抽象類。通過工廠制造器,創(chuàng)建出該抽象工廠的子類。

好比如說,一個博客頁面有個換膚系統(tǒng)。那么假如有兩套風(fēng)格,黑和白。那么,我選擇了黑色風(fēng)格的,實際這步就相當(dāng)通過換膚系統(tǒng)這個工廠制造器,創(chuàng)建出一個黑色主題的工廠,該黑色主題的工廠內(nèi)可以生產(chǎn)各種黑色風(fēng)格的產(chǎn)品,比如黑色頭像掛飾,黑色背景,黑色的xxx等,然后通過這些黑色主題產(chǎn)品完成了整個換膚操作。白色主題也如此。

好吧,上次以水果工廠作為一個類,那么這次要創(chuàng)建一個蔬菜工廠,水果和蔬菜這兩類都屬于種植物,那么我們就可以根據(jù)這一共同點抽象出一個種植物抽象類,即種植物工廠。

首先,創(chuàng)建產(chǎn)品類,包括上次的水果,和現(xiàn)在的蔬菜,他們都實現(xiàn)了水果類接口和蔬菜類接口:

水果系列:

public interface Fruit { 
  void printInfo(); 
} 
public class Apple implements Fruit{ 
  @Override 
  public void printInfo() { 
    // TODO Auto-generated method stub 
    System.out.println("蘋果"); 
  } 
} 
public class Banana implements Fruit{ 
  @Override 
  public void printInfo() { 
    // TODO Auto-generated method stub 
    System.out.println("香蕉"); 
  } 
} 
public class Orange implements Fruit{ 
  @Override 
  public void printInfo() { 
    // TODO Auto-generated method stub 
    System.out.println("橙子"); 
  } 
} 

接著是蔬菜系列:

public interface Vegetable { 
  public void printInfo(); 
} 
public class Tomato implements Vegetable{ 
  @Override 
  public void printInfo() { 
    // TODO Auto-generated method stub 
    System.out.println("西紅柿"); 
  } 
} 
public class Cabbage implements Vegetable{ 
  @Override 
  public void printInfo() { 
    // TODO Auto-generated method stub 
    System.out.println("白菜"); 
  } 
} 
public class Eggplant implements Vegetable{ 
  @Override 
  public void printInfo() { 
    // TODO Auto-generated method stub 
    System.out.println("茄子"); 
  } 
} 

然后,是它們各自的工廠類:

水果工廠:

public class FruitFactory extends PlantFactory{ 
  public static final int APPLE=1; 
  public static final int BANANA=2; 
  public static final int ORANGE=3; 
  @Override 
  public Fruit getFruit(int fruitType){ 
    if(fruitType==APPLE){ 
      return new Apple(); 
    } 
    if(fruitType==BANANA){ 
      return new Banana(); 
    } 
    if(fruitType==ORANGE){ 
      return new Orange(); 
    } 
    return null; 
  } 
  @Override 
  Vegetable getVegetable(int vegetableType) { 
    // TODO Auto-generated method stub 
    return null; 
  } 
} 

蔬菜工廠:

public class VegetableFactory extends PlantFactory { 
  public static final int CABBAGE=1; 
  public static final int TOMATO=2; 
  public static final int EGGPLANT=3; 
  @Override 
  Fruit getFruit(int fruitType) { 
    // TODO Auto-generated method stub 
    return null; 
  } 
  @Override 
  public Vegetable getVegetable(int vegetableType) { 
    // TODO Auto-generated method stub 
    if(vegetableType==CABBAGE){ 
      return new Cabbage(); 
    } 
    if(vegetableType==TOMATO){ 
      return new Tomato(); 
    } 
    if(vegetableType==EGGPLANT){ 
      return new Eggplant(); 
    }     
    return null; 
  } 
} 

可以看到,它們都是屬于種植物這一類,所以都是繼承了種植工廠類

public abstract class PlantFactory { 
  abstract Fruit getFruit(int fruitType); 
  abstract Vegetable getVegetable(int vegetableType); 
} 

最后,提供一個工廠生產(chǎn)器,即生產(chǎn)工廠的工廠:

public class Plantation { 
  public static final int FRUIT=1; 
  public static final int VEGETABLE=2; 
  public static PlantFactory getFactory(int factoryType){ 
    if(factoryType==FRUIT){ 
      return new FruitFactory(); 
    } 
    if(factoryType==VEGETABLE){ 
      return new VegetableFactory(); 
    } 
    return null; 
  } 
} 

好吧,寫個main測試下:

public static void main(String[] args) { 
  // TODO Auto-generated method stub 
 
  FruitFactory fruitFactory=(FruitFactory)Plantation.getFactory(Plantation.FRUIT);     
  Apple apple=(Apple) fruitFactory.getFruit(FruitFactory.APPLE); 
  apple.printInfo(); 
   
  VegetableFactory vegetableFactory=(VegetableFactory)Plantation.getFactory(Plantation.VEGETABLE); 
  Tomato tomato=(Tomato) vegetableFactory.getVegetable(VegetableFactory.TOMATO); 
  tomato.printInfo(); 
} 

結(jié)果:

蘋果
西紅柿

雖然工廠設(shè)計模式在獲取產(chǎn)品類時很方便,但實際上產(chǎn)品的需求越嚴(yán)格,那么內(nèi)部系統(tǒng)則越發(fā)龐大復(fù)雜,對于生產(chǎn)一些小產(chǎn)品來說,使用這么復(fù)雜龐大的系統(tǒng)反而浪費資源。

總結(jié)

以上就是本文關(guān)于Java設(shè)計模式筆記之抽象工廠代碼示例的全部內(nèi)容。代碼是一個人主觀意志的客觀反映。。。胡扯了,參考別人寫的代碼,另外,多看看源碼也是有好處的,學(xué)習(xí)別人實現(xiàn)某個功能的設(shè)計思路,來提高自己的編程水平。歡迎參閱:Java多線程之線程通信生產(chǎn)者消費者模式及等待喚醒機(jī)制代碼詳解、Java單例模式實現(xiàn)靜態(tài)內(nèi)部類方法示例等,有什么問題可以隨時留言,歡迎大家交流討論。

相關(guān)文章

  • Java應(yīng)用程序的CPU使用率飆升原因詳細(xì)分析

    Java應(yīng)用程序的CPU使用率飆升原因詳細(xì)分析

    這篇文章主要介紹了Java應(yīng)用程序的CPU使用率飆升原因詳細(xì)分析,在 Java 中,我們使用 JVM 進(jìn)行線程調(diào)度,所以一般來說,線程的調(diào)度有兩種模式:分時調(diào)度和搶占式調(diào)度,線程和進(jìn)程在阻塞或者等待時,都不會使用 CPU 資源,需要的朋友可以參考下
    2024-01-01
  • SpringBoot集成Druid連接池進(jìn)行SQL監(jiān)控的問題解析

    SpringBoot集成Druid連接池進(jìn)行SQL監(jiān)控的問題解析

    這篇文章主要介紹了SpringBoot集成Druid連接池進(jìn)行SQL監(jiān)控的問題解析,在SpringBoot工程中引入Druid連接池非常簡單,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-07-07
  • 詳解SpringCloud Config配置中心

    詳解SpringCloud Config配置中心

    這篇文章主要介紹了詳解SpringCloud Config配置中心,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • 關(guān)于SpringMVC請求域?qū)ο蟮臄?shù)據(jù)共享問題

    關(guān)于SpringMVC請求域?qū)ο蟮臄?shù)據(jù)共享問題

    這篇文章主要介紹了SpringMVC請求域?qū)ο蟮臄?shù)據(jù)共享問題,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • 一文詳解Spring是怎樣處理循環(huán)依賴的

    一文詳解Spring是怎樣處理循環(huán)依賴的

    循環(huán)依賴簡單理解就是A,B 兩個bean相互依賴,A依賴B,B依賴A,A->B、B->A大概就是這樣,這篇文章主要介紹了Spring是怎樣處理循環(huán)依賴的,文中通過代碼示例給大家介紹的非常詳細(xì),具有一定的參考價值,需要的朋友可以參考下
    2024-01-01
  • MyBatis/mybatis-plus項目打印SQL的方法實現(xiàn)

    MyBatis/mybatis-plus項目打印SQL的方法實現(xiàn)

    SpringBoot項目中,經(jīng)常需要打印SQL語句及其參數(shù),本文就來介紹一下MyBatis/mybatis-plus項目打印SQL的方法實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • git stash 和unstash的使用操作,git unstash failed

    git stash 和unstash的使用操作,git unstash failed

    這篇文章主要介紹了git stash 和unstash的使用操作,git unstash failed,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 詳解JAVA 時間處理相關(guān)類

    詳解JAVA 時間處理相關(guān)類

    這篇文章主要介紹了JAVA 時間處理相關(guān)類的知識,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • Java最簡單的DES加密算法實現(xiàn)案例

    Java最簡單的DES加密算法實現(xiàn)案例

    下面小編就為大家?guī)硪黄狫ava最簡單的DES加密算法實現(xiàn)案例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • IDEA中打jar包的2種方式(Maven打jar包)

    IDEA中打jar包的2種方式(Maven打jar包)

    這篇文章主要給大家介紹了關(guān)于IDEA中打jar包的2種方式,分別是不使用Maven直接打Jar包與使用Maven打jar包的兩種方法,需要的朋友可以參考下
    2021-05-05

最新評論

衢州市| 城口县| 湟源县| 错那县| 滁州市| 郸城县| 乌鲁木齐市| 宁强县| 盱眙县| 密山市| 仙居县| 海阳市| 长汀县| 津南区| 武山县| 土默特左旗| 平阳县| 临漳县| 梧州市| 渭源县| 巧家县| 额敏县| 岫岩| 微山县| 隆安县| 珠海市| 衢州市| 正定县| 万年县| 南陵县| 汽车| 泗水县| 新平| 嘉黎县| 德格县| 安乡县| 海口市| 梅河口市| 习水县| 新泰市| 鄂州市|