真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java的抽象工廠模式是什么

這篇文章主要講解了“Java的抽象工廠模式是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Java的抽象工廠模式是什么”吧!

成都創(chuàng)新互聯(lián)公司專注于鹿泉網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供鹿泉營銷型網(wǎng)站建設(shè),鹿泉網(wǎng)站制作、鹿泉網(wǎng)頁設(shè)計(jì)、鹿泉網(wǎng)站官網(wǎng)定制、微信小程序服務(wù),打造鹿泉網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供鹿泉網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

抽象工廠模式

抽象工廠模式

抽象工廠模式(Abstract Factory Pattern)是圍繞一個(gè)超級(jí)工廠創(chuàng)建其他工廠。該超級(jí)工廠又稱為其他工廠的工廠。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。

在抽象工廠模式中,接口是負(fù)責(zé)創(chuàng)建一個(gè)相關(guān)對(duì)象的工廠,不需要顯式指定它們的類。每個(gè)生成的工廠都能按照工廠模式提供對(duì)象。

舉個(gè)例子:還是用農(nóng)村人和城里人舉例吧,加深印象

首先,我是農(nóng)村人,我老爸老媽就是個(gè)果農(nóng)、菜農(nóng),種蘋果,梨,葡萄,包菜,菜花,辣椒等,農(nóng)村人自己種的水果蔬菜,肯定很香,無公害,城里面水果大多不敢吃,大部分都是有錢人承包的果園菜園打農(nóng)藥,催熟,膨大劑,美化粉,農(nóng)村人雖然窮,但是很地道,不坑人,你們城里人想吃我們家的水果、蔬菜怎么辦,你們也只能去水果店蔬菜店買,由于大城市和農(nóng)村距離產(chǎn)生了一個(gè)城市蔬菜水果批發(fā)大市場(chǎng)(超級(jí)工廠:里面什么東西都有,有水果,有蔬菜,有海鮮,肉類等等),水果店,蔬菜店(其他工廠)會(huì)在批發(fā)市場(chǎng)批發(fā)我們家的水果,蔬菜(前提有我們家的,緣分吧,應(yīng)該機(jī)會(huì)太小,題外話,其實(shí)農(nóng)民種的蔬菜水果,一般流入不到大城市的,有時(shí)候便宜的,就沒有商家來收的)

Java的抽象工廠模式是什么

代碼實(shí)現(xiàn)

  • 創(chuàng)建一個(gè)水果接口

    /**
     * 
     * @ClassName: Fruits
     * @Description: TODO(我們都是農(nóng)村的,自己種的水果,肯定很香,無公害,城里面水果不敢吃,大部分都是打農(nóng)藥,催熟,膨大劑,美化粉)
     * @author wangmeng
     * @date 2021年5月11日
     */
    public interface Fruits {
    	// 諸葛家的水果地
    	public void buildFruits();
    
    }

  • 接口實(shí)現(xiàn)

    • 蘋果地

      public class Apple implements Fruits {
      	@Override
      	public void buildFruits() {
      		System.out.println("農(nóng)村人套路少,老實(shí),種的蘋果很脆很甜,沒有化學(xué)物質(zhì),賣的還便宜,付出收獲不成正比");
      	}
      
      }

    • public class Pear implements Fruits {
      	@Override
      	public void buildFruits() {
      		System.out.println("農(nóng)村人套路少,老實(shí),自家地種的梨很脆很甜,沒有化學(xué)物質(zhì),而且還特便宜");
      	}
      
      }

  • 創(chuàng)建一個(gè)蔬菜接口

    /**
     * 
     * @ClassName: Vegetables
     * @Description: TODO(蔬菜接口)
     * @author wangmeng
     * @date 2021年5月11日
     */
    public interface Vegetables {
    	// 諸葛家的蔬菜地 
    	public void buildVegetables();
    	
    }

  • 蔬菜接口實(shí)現(xiàn)

    • 包菜地

      /**
       * 
       * @ClassName: BaoCai
       * @Description: TODO(包菜地,主要生產(chǎn)包菜的)
       * @author 諸葛孔暗
       * @date 2021年5月12日
       */
      public class BaoCai implements Vegetables {
      
      	@Override
      	public void buildVegetables() {
      		System.out.println("農(nóng)村人種的包菜,地里面賣2毛錢一斤還送一斤,城里人買的包菜,2塊錢一斤還缺斤少兩,差價(jià)翻了10倍,還不是諸葛家種的,有可能是資本家種的轉(zhuǎn)基因包菜");
      	}
      }

    • 菜花地

      /**
       * 
       * @ClassName: CaiHua
       * @Description: TODO(菜花地,主要生產(chǎn)菜花的)
       * @author 諸葛孔暗
       * @date 2021年5月12日
       */
      public class CaiHua implements Vegetables {
      
      	@Override
      	public void buildVegetables() {
      		System.out.println("農(nóng)村人種的菜花,地里面賣2毛錢一斤還送一斤,城里人買的菜花,2塊錢一斤還缺斤少兩,差價(jià)翻了10倍,還不是諸葛家種的,有可能是資本家種的轉(zhuǎn)基因菜花");
      
      	}
      
      }

  • 為 Fruits(水果)和 Vegetables (蔬菜)對(duì)象創(chuàng)建抽象類來獲取工廠

    /**
     * 
     * @ClassName: AbstractFactory
     * @Description: TODO(為 Fruits(水果)和 Vegetables (蔬菜)對(duì)象創(chuàng)建抽象類來獲取工廠,功能相當(dāng)于大型批發(fā)市場(chǎng)了)
     * @author 諸葛孔暗
     * @date 2021年5月12日
     */
    public abstract class AbstractFactory {
    	
    	public abstract Fruits getFruits(String appleType);
    	
    	public abstract Vegetables getVegetables(String vegeType) ;
    
    }

  • 水果超市工廠

    /**
     * 
     * @ClassName: FruitsFactory
     * @Description: TODO(水果超市,水果工廠)
     * @author wangmeng
     * @date 2021年5月12日
     */
    public class FruitsFactory extends AbstractFactory {
    
    	@Override
    	public Fruits getFruits(String appleType) {
    		if(appleType == null){
    	         return null;
    	      }        
    	      if(appleType.equalsIgnoreCase("Apple")){
    	         return new Apple();
    	      } else if(appleType.equalsIgnoreCase("Pear")){
    	         return new Pear();
    	      } 
    	      return null;
    	}
    
    	/**
    	 * 
    	 * @Title: getShape
    	 * @Description: TODO(生活小常識(shí):水果超市也有可能賣蔬菜:比如:妹子們都愛黃瓜,哈哈···,就去水果店就能買到,但它是蔬菜啊)
    	 * @param vegeType
    	 * @return 
    	 * @see com.atxiaodei.factory.absfactory.AbstractFactory#getShape(java.lang.String) 
    	 * @author wangmeng
    	 * @date 2021年5月12日
    	 */
    	@Override
    	public Vegetables getVegetables(String vegeType) {
    		// 
    		return null;
    	}
    
    }

  • 蔬菜超市,工廠

    /**
     * 
     * @ClassName: VegetablesFactory
     * @Description: TODO(蔬菜超市,蔬菜工廠)
     * @author wangmeng
     * @date 2021年5月12日
     */
    public class VegetablesFactory extends AbstractFactory {
    
    	@Override
    	public Fruits getFruits(String appleType) {
    		// TODO Auto-generated method stub
    		return null;
    	}
    
    	@Override
    	public Vegetables getVegetables(String vegeType) {
    		if(vegeType == null){
    	         return null;
    	      }        
    	      if(vegeType.equalsIgnoreCase("Baocai")){
    	         return new BaoCai();
    	      } else if(vegeType.equalsIgnoreCase("CaiHua")){
    	         return new CaiHua();
    	      } 
    	      return null;
    	}
    
    }

  • 創(chuàng)建大型批發(fā)市場(chǎng)大老板,生產(chǎn)水果和蔬菜(創(chuàng)建一個(gè)工廠創(chuàng)造器/生成器類,通過傳遞水果蔬菜類型信息來獲取工廠。)

    /**
     * 
     * @ClassName: FactoryProducer
     * @Description: TODO(創(chuàng)建大型批發(fā)市場(chǎng)大老板,生產(chǎn)水果和蔬菜(創(chuàng)建一個(gè)工廠創(chuàng)造器/生成器類,通過傳遞水果蔬菜類型信息來獲取工廠。))
     * @author wangmeng
     * @date 2021年5月12日
     */
    public class FactoryProducer {
    	public static AbstractFactory getFactory(String choice){
    		
    	      if(choice.equalsIgnoreCase("Fruits")){
    	         return new FruitsFactory();
    	      } else if(choice.equalsIgnoreCase("Vegetables")){
    	         return new VegetablesFactory();
    	      }
    	      return null;
    	   }
    }

  • 測(cè)試

    /**
     * 
     * @ClassName: Test
     * @Description: TODO(實(shí)現(xiàn)過程都是通過類型獲取對(duì)象)
     * @author wangmeng
     * @date 2021年5月12日
     */
    public class Test {
    	public static void main(String[] args) {
    		
    		
    		// 農(nóng)民凌晨12點(diǎn)把水果運(yùn)到了批發(fā)市場(chǎng)(辛苦的農(nóng)民人,白天耕地,半夜賣菜的農(nóng)民人,可憐天下父母心)
    		AbstractFactory fruitsFactory=FactoryProducer.getFactory("Fruits");
    		
    		// 超市老板凌晨5點(diǎn)去批發(fā)市場(chǎng)批發(fā)了蘋果和梨(早起的創(chuàng)業(yè)人)
    		Fruits apple=fruitsFactory.getFruits("Apple");
    		Fruits pear=fruitsFactory.getFruits("Pear");
    		
    			// 太陽升起來了,城里人睡到了中午12點(diǎn)了,算了不吃飯了,去水果超市買兩個(gè)諸葛標(biāo)簽的蘋果和梨吃,無公害(懶惰,亞健康的我們)
    		apple.buildFruits();
    		pear.buildFruits();
    		
    		
    		// 農(nóng)民凌晨12點(diǎn)把蔬菜運(yùn)到了批發(fā)市場(chǎng)(白天耕地,半夜賣菜的農(nóng)民人,可憐天下父母心)
    		AbstractFactory vegetablesFactory = FactoryProducer.getFactory("Vegetables");
    
    		// 超市老板凌晨5點(diǎn)去批發(fā)市場(chǎng)批發(fā)了蘋果和梨(早起的創(chuàng)業(yè)人,比農(nóng)民聰明點(diǎn),早起早睡)
    		Vegetables baocai = vegetablesFactory.getVegetables("Baocai");
    		Vegetables caihua = vegetablesFactory.getVegetables("caihua");
    
    		// 太陽升起來了,城里人睡到了中午12點(diǎn)了,算了不吃飯了,去蔬菜超市買兩個(gè)諸葛標(biāo)簽的包菜和菜花下午包餃子吃,無公害(懶惰,亞健康的我們)
    		baocai.buildVegetables();
    		caihua.buildVegetables();
    		
    		
    	}
    }

  • 輸出

    農(nóng)村人套路少,老實(shí),種的蘋果很脆很甜,沒有化學(xué)物質(zhì),賣的還便宜,付出收獲不成正比
    農(nóng)村人套路少,老實(shí),自家地種的梨很脆很甜,沒有化學(xué)物質(zhì),而且還特便宜
    
    農(nóng)村人種的包菜,地里面賣2毛錢一斤還送一斤,城里人買的包菜,2塊錢一斤還缺斤少兩,差價(jià)翻了10倍,還不是諸葛家種的,有可能是資本家種的轉(zhuǎn)基因包菜
    農(nóng)村人種的菜花,地里面賣2毛錢一斤還送一斤,城里人買的菜花,2塊錢一斤還缺斤少兩,差價(jià)翻了10倍,還不是諸葛家種的,有可能是資本家種的轉(zhuǎn)基因菜花

總結(jié)

意圖:提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無需指定它們具體的類。

主要解決:主要解決接口選擇的問題。

何時(shí)使用:系統(tǒng)的產(chǎn)品有多于一個(gè)的產(chǎn)品族,而系統(tǒng)只消費(fèi)其中某一族的產(chǎn)品。

如何解決:在一個(gè)產(chǎn)品族里面,定義多個(gè)產(chǎn)品。

關(guān)鍵代碼: 在一個(gè)工廠里聚合多個(gè)同類產(chǎn)品。

應(yīng)用實(shí)例:工作了,為了參加一些聚會(huì),肯定有兩套或多套衣服吧,比如說有商務(wù)裝(成套,一系列具體產(chǎn)品)、時(shí)尚裝(成套,一系列具體產(chǎn)品),甚至對(duì)于一個(gè)家庭來說,可能有商務(wù)女裝、商務(wù)男裝、時(shí)尚女裝、時(shí)尚男裝,這些也都是成套的,即一系列具體產(chǎn)品。假設(shè)一種情況(現(xiàn)實(shí)中是不存在的,要不然,沒法進(jìn)入共產(chǎn)主義了,但有利于說明抽象工廠模式),在您的家中,某一個(gè)衣柜(具體工廠)只能存放某一種這樣的衣服(成套,一系列具體產(chǎn)品),每次拿這種成套的衣服時(shí)也自然要從這個(gè)衣柜中取出了。用 OOP 的思想去理解,所有的衣柜(具體工廠)都是衣柜類的(抽象工廠)某一個(gè),而每一件成套的衣服又包括具體的上衣(某一具體產(chǎn)品),褲子(某一具體產(chǎn)品),這些具體的上衣其實(shí)也都是上衣(抽象產(chǎn)品),具體的褲子也都是褲子(另一個(gè)抽象產(chǎn)品)。

優(yōu)點(diǎn):當(dāng)一個(gè)產(chǎn)品族中的多個(gè)對(duì)象被設(shè)計(jì)成一起工作時(shí),它能保證客戶端始終只使用同一個(gè)產(chǎn)品族中的對(duì)象。

缺點(diǎn):產(chǎn)品族擴(kuò)展非常困難,要增加一個(gè)系列的某一產(chǎn)品,既要在抽象的 Creator 里加代碼,又要在具體的里面加代碼。

使用場(chǎng)景:

1、QQ 換皮膚,一整套一起換。

2、生成不同操作系統(tǒng)的程序。

注意事項(xiàng):產(chǎn)品族難擴(kuò)展,產(chǎn)品等級(jí)易擴(kuò)展。

感謝各位的閱讀,以上就是“Java的抽象工廠模式是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Java的抽象工廠模式是什么這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


網(wǎng)站標(biāo)題:Java的抽象工廠模式是什么
文章網(wǎng)址:http://weahome.cn/article/ggcsed.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部