日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
一篇學(xué)會(huì)抽象工廠模式

[[409513]]

本文轉(zhuǎn)載自微信公眾號(hào)「我好困啊」,作者mengxin。轉(zhuǎn)載本文請聯(lián)系我好困啊公眾號(hào)。

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供宣恩網(wǎng)站建設(shè)、宣恩做網(wǎng)站、宣恩網(wǎng)站設(shè)計(jì)、宣恩網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、宣恩企業(yè)網(wǎng)站模板建站服務(wù),十年宣恩做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

意圖

定義一個(gè)超級(jí)工廠,用于創(chuàng)建其他對應(yīng)產(chǎn)品工廠。該工廠又可看成其他各種工廠的工廠。

主要解決

解決接口選擇問題

關(guān)鍵代碼

在一個(gè)工廠內(nèi)聚合多個(gè)同類型的產(chǎn)品,然后定義超級(jí)工廠創(chuàng)建對應(yīng)工廠。

優(yōu)點(diǎn)

當(dāng)一個(gè)產(chǎn)品族中多個(gè)對象被設(shè)計(jì)成一起工作的時(shí)候,每次獲取都能保證獲取到同一類型的產(chǎn)品。

缺點(diǎn)

產(chǎn)品族擴(kuò)展非常困難,要增加一個(gè)系列的某一產(chǎn)品,對象過多。

使用場景

需要生成不同類型的產(chǎn)品族時(shí)。如:白貓,黑貓等它們可組成同一產(chǎn)品"貓"。而大狗,小狗等它們可組成同一產(chǎn)品“狗”,那么我們每次獲取都能保證獲取到的是同一類型的產(chǎn)品。獲取貓時(shí),可獲取里面的一整套的各種品種的貓。

具體實(shí)現(xiàn)

創(chuàng)建第一個(gè)產(chǎn)品族

 
 
 
  1. 1/** 
  2. 2* 第一個(gè)產(chǎn)品,dog 
  3. 3*/ 
  4. 4public interface Dog { 
  5. 6   //設(shè)置dog公用跑的動(dòng)作 
  6. 7   void run(); 
  7. 8} 

其對應(yīng)的產(chǎn)品族對應(yīng)下的產(chǎn)品

Dog第一個(gè)產(chǎn)品

 
 
 
  1. 1/** 
  2. 2* Dog 產(chǎn)品族-> BigDog 
  3. 3*/ 
  4. 4public class BigDog implements Dog{ 
  5. 6   @Override 
  6. 7   public void run() { 
  7. 8       System.out.println("The big dog runs fast..."); 
  8. 9  } 
  9. 0} 

Dog第二個(gè)產(chǎn)品

 
 
 
  1. 1/** 
  2. 2* Dog 產(chǎn)品族-> SmallDog 
  3. 3*/ 
  4. 4public class SmallDog implements Dog{ 
  5. 6   @Override 
  6. 7   public void run() { 
  7. 8       System.out.println("The small dog runs slow..."); 
  8. 9  } 
  9. 0} 

創(chuàng)建dog工廠用于生成dog產(chǎn)品

 
 
 
  1.  1/** 
  2.  2* 用于生成對應(yīng)Dog的工廠 
  3.  3*/ 
  4.  4public class DogFactory extends AnimeFactory{ 
  5.  5 
  6.  6 
  7.  7   @Override 
  8.  8   public Dog getDog(String size) { 
  9.  9       if ("BIG".equals(size.toUpperCase())){ 
  10. 10           return new BigDog(); 
  11. 11      }else if ("SMALL".equals(size.toUpperCase())){ 
  12. 12           return new SmallDog(); 
  13. 13      } 
  14. 14       return null; 
  15. 15  } 
  16. 16 
  17. 17 
  18. 18   @Override 
  19. 19   public Cat getCat(String color) { 
  20. 20       return null; 
  21. 21  } 
  22. 22} 

創(chuàng)建第二個(gè)產(chǎn)品族

 
 
 
  1. 1/** 
  2. 2* 第二個(gè)產(chǎn)品cat 
  3. 3*/ 
  4. 4public interface Cat { 
  5. 6   //貓的公用動(dòng)作 
  6. 7   void speak(); 
  7. 8} 

其產(chǎn)品族對應(yīng)下的產(chǎn)品:

Cat第一個(gè)產(chǎn)品

 
 
 
  1. 1/** 
  2. 2* Cat 產(chǎn)品族-> BlackCat 
  3. 3*/ 
  4. 4public class BlackCat implements Cat{ 
  5. 6   @Override 
  6. 7   public void speak() { 
  7. 8       System.out.println("Black cat speak miaomiaomiao"); 
  8. 9  } 
  9. 0} 

Cat第二個(gè)產(chǎn)品

 
 
 
  1. 1/** 
  2. 2* Cat 產(chǎn)品族-> WhiteCat 
  3. 3*/ 
  4. 4public class WhiteCat implements Cat{ 
  5. 6   @Override 
  6. 7   public void speak() { 
  7. 8       System.out.println("White cat speak miaomiaomiao"); 
  8. 9  } 
  9. 0} 

創(chuàng)建Cat工廠,用于生成cat

 
 
 
  1.  1/** 
  2.  2* 用于生產(chǎn)對應(yīng)Cat的工廠 
  3.  3*/ 
  4.  4public class CatFactory extends AnimeFactory{ 
  5.  5 
  6.  6   @Override 
  7.  7   public Dog getDog(String size) { 
  8.  8       return null; 
  9.  9  } 
  10. 10 
  11. 11   @Override 
  12. 12   public Cat getCat(String color) { 
  13. 13       if ("WHITE".equals(color.toUpperCase())){ 
  14. 14           return new WhiteCat(); 
  15. 15      }else if ("BLACK".equals(color.toUpperCase())){ 
  16. 16           return new BlackCat(); 
  17. 17      } 
  18. 18       return null; 
  19. 19  } 
  20. 20} 

最后創(chuàng)建超級(jí)工廠,生成對應(yīng)工廠

 
 
 
  1. 1/** 
  2. 2 * 超級(jí)抽象工廠,用于創(chuàng)建其他工廠 
  3. 3 */ 
  4. 4public abstract class AnimeFactory { 
  5. 6    public abstract Dog getDog(String size); 
  6. 8    public abstract Cat getCat(String color); 
  7. 0} 
 
 
 
  1.  1/** 
  2.  2 * 用于生成對應(yīng)工廠的工具類 
  3.  3 */ 
  4.  4public class FactoryProducer { 
  5.  5 
  6.  6    public static AnimeFactory getAnimeFactory(String type){ 
  7.  7        if ("CAT".equals(type.toUpperCase())){ 
  8.  8            //生成對應(yīng)貓的工廠 
  9.  9            return new CatFactory(); 
  10. 10        }else if ("DOG".equals(type.toUpperCase())){ 
  11. 11            //生成對應(yīng)狗工廠 
  12. 12            return new DogFactory(); 
  13. 13        } 
  14. 14        return null; 
  15. 15    } 
  16. 16 
  17. 17} 

測試:

 
 
 
  1.  1/** 
  2.  2 * 測試類 
  3.  3 */ 
  4.  4public class Test { 
  5.  5 
  6.  6    public static void main(String[] args) { 
  7.  7        //獲取貓工廠 
  8.  8        AnimeFactory factory = FactoryProducer.getAnimeFactory("cat"); 
  9.  9        Cat cat = factory.getCat("Black"); 
  10. 10        cat.speak(); 
  11. 11 
  12. 12        //獲取狗工廠 
  13. 13        factory = FactoryProducer.getAnimeFactory("dog"); 
  14. 14        Dog dog = factory.getDog("Big"); 
  15. 15        dog.run(); 
  16. 16    } 
  17. 17 
  18. 18} 

標(biāo)題名稱:一篇學(xué)會(huì)抽象工廠模式
瀏覽地址:http://www.dlmjj.cn/article/cdsgphd.html