欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

首先,創(chuàng)建產(chǎn)品類,包括上次的水果,和現(xiàn)在的蔬菜,他們都實(shí)現(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); 
} 

最后,提供一個(gè)工廠生產(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; 
  } 
} 

好吧,寫個(gè)main測(cè)試下:

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

總結(jié)

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

相關(guān)文章

  • SpringBoot使用swagger生成api接口文檔的方法詳解

    SpringBoot使用swagger生成api接口文檔的方法詳解

    在之前的文章中,使用mybatis-plus生成了對(duì)應(yīng)的包,在此基礎(chǔ)上,我們針對(duì)項(xiàng)目的api接口,添加swagger配置和注解,生成swagger接口文檔,需要的可以了解一下
    2022-10-10
  • java中switch條件語句的三種語法、用法及支持的參數(shù)類型

    java中switch條件語句的三種語法、用法及支持的參數(shù)類型

    Java中的switch語句是一種多分支選擇結(jié)構(gòu),可以一個(gè)變量的值改變程序的控制流,這篇文章主要給大家介紹了關(guān)于java中switch條件語句的三種語法、用法及支持的參數(shù)類型的相關(guān)資料,需要的朋友可以參考下
    2024-06-06
  • Java?lambda表達(dá)式與泛型整理總結(jié)

    Java?lambda表達(dá)式與泛型整理總結(jié)

    Lambda?表達(dá)式(lambda?expression)是一個(gè)匿名函數(shù),Lambda表達(dá)式基于數(shù)學(xué)中的λ演算得名。泛型編程,故如其名,是一個(gè)泛化的編程方式。其實(shí)現(xiàn)原理為程序員編寫一個(gè)函數(shù)/類的代碼示例,讓編譯器去填補(bǔ)出不同的函數(shù)實(shí)現(xiàn)
    2022-07-07
  • 簡(jiǎn)單了解SPRINGIOC的底層原理演變過程

    簡(jiǎn)單了解SPRINGIOC的底層原理演變過程

    這篇文章主要介紹了簡(jiǎn)單了解SPRINGIOC的底層原理演變過程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Spring5源碼解析之Spring中的異步和計(jì)劃任務(wù)

    Spring5源碼解析之Spring中的異步和計(jì)劃任務(wù)

    本篇文章主要介紹了Spring5源碼解析之Spring中的異步和計(jì)劃任務(wù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-10-10
  • java使用iterator遍歷指定目錄示例分享

    java使用iterator遍歷指定目錄示例分享

    這篇文章主要介紹了java使用iterator遍歷指定目錄示例,需要的朋友可以參考下
    2014-04-04
  • Java正則驗(yàn)證正整數(shù)的方法分析【測(cè)試可用】

    Java正則驗(yàn)證正整數(shù)的方法分析【測(cè)試可用】

    這篇文章主要介紹了Java正則驗(yàn)證正整數(shù)的方法,結(jié)合實(shí)例形式對(duì)比分析了java針對(duì)正整數(shù)的驗(yàn)證方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-08-08
  • 全面解釋Java中的serialVersionUID

    全面解釋Java中的serialVersionUID

    以下是對(duì)Java中的serialVersionUID進(jìn)行了全面的分析介紹。需要的朋友可以過來參考下
    2013-08-08
  • 一文簡(jiǎn)單了解C#?中的DataSet類

    一文簡(jiǎn)單了解C#?中的DataSet類

    這篇文章主要介紹了一文簡(jiǎn)單了解C#?中的DataSet類,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • java使用spring實(shí)現(xiàn)發(fā)送mail的方法

    java使用spring實(shí)現(xiàn)發(fā)送mail的方法

    這篇文章主要介紹了java使用spring實(shí)現(xiàn)發(fā)送mail的方法,涉及java基于spring框架發(fā)送郵件的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10

最新評(píng)論