成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一篇學會抽象工廠模式

開發 前端
定義一個超級工廠,用于創建其他對應產品工廠。該工廠又可看成其他各種工廠的工廠。

[[409513]]

本文轉載自微信公眾號「我好困啊」,作者mengxin。轉載本文請聯系我好困啊公眾號。

意圖

定義一個超級工廠,用于創建其他對應產品工廠。該工廠又可看成其他各種工廠的工廠。

主要解決

解決接口選擇問題

關鍵代碼

在一個工廠內聚合多個同類型的產品,然后定義超級工廠創建對應工廠。

優點

當一個產品族中多個對象被設計成一起工作的時候,每次獲取都能保證獲取到同一類型的產品。

缺點

產品族擴展非常困難,要增加一個系列的某一產品,對象過多。

使用場景

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

具體實現

創建第一個產品族

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

其對應的產品族對應下的產品

Dog第一個產品

  1. 1/** 
  2. 2* Dog 產品族-> 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第二個產品

  1. 1/** 
  2. 2* Dog 產品族-> 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} 

創建dog工廠用于生成dog產品

  1.  1/** 
  2.  2* 用于生成對應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} 

創建第二個產品族

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

其產品族對應下的產品:

Cat第一個產品

  1. 1/** 
  2. 2* Cat 產品族-> 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第二個產品

  1. 1/** 
  2. 2* Cat 產品族-> 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} 

創建Cat工廠,用于生成cat

  1.  1/** 
  2.  2* 用于生產對應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} 

最后創建超級工廠,生成對應工廠

  1. 1/** 
  2. 2 * 超級抽象工廠,用于創建其他工廠 
  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 * 用于生成對應工廠的工具類 
  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            //生成對應貓的工廠 
  9.  9            return new CatFactory(); 
  10. 10        }else if ("DOG".equals(type.toUpperCase())){ 
  11. 11            //生成對應狗工廠 
  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} 

 

責任編輯:武曉燕 來源: 我好困啊
相關推薦

2021-05-11 08:54:59

建造者模式設計

2023-05-05 06:39:52

Java工廠設計模式

2021-10-26 10:40:26

代理模式虛擬

2022-01-02 08:43:46

Python

2022-02-07 11:01:23

ZooKeeper

2021-07-02 09:45:29

MySQL InnoDB數據

2023-01-03 08:31:54

Spring讀取器配置

2022-08-26 09:29:01

Kubernetes策略Master

2021-07-05 22:11:38

MySQL體系架構

2023-11-28 08:29:31

Rust內存布局

2022-08-23 08:00:59

磁盤性能網絡

2021-07-02 08:51:29

源碼參數Thread

2021-09-28 08:59:30

復原IP地址

2021-10-14 10:22:19

逃逸JVM性能

2022-04-12 08:30:52

回調函數代碼調試

2021-10-27 09:59:35

存儲

2022-10-20 07:39:26

2021-07-16 22:43:10

Go并發Golang

2023-03-13 21:38:08

TCP數據IP地址

2022-03-11 10:21:30

IO系統日志
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕在线播放第一页 | 成人午夜在线 | 欧美日韩一区二区电影 | 精品国产欧美一区二区三区成人 | 成人欧美日韩一区二区三区 | 日韩中文字幕一区二区 | 不卡一区二区三区四区 | 亚洲欧美中文字幕在线观看 | 少妇无套高潮一二三区 | 亚洲精品二三区 | 欧美在线| 亚洲精品在线免费观看视频 | 中文字幕高清免费日韩视频在线 | 在线视频91 | 黄色大片免费网站 | 国产人免费人成免费视频 | 中文字幕一区二区三区日韩精品 | 黄在线免费观看 | 亚洲精品国产精品国自产在线 | 青青久久久 | 狠狠亚洲 | 中文字幕在线第二页 | 99re6在线 | 欧美炮房| 免费高清av| 欧美一区二区三区国产精品 | 国产精品高清一区二区三区 | 91在线电影 | 日韩在线视频网址 | 三级在线免费观看 | 成人h片在线观看 | 国产成人精品视频在线观看 | 日韩看片 | 欧美日韩在线精品 | 中文字幕av在线一二三区 | 日本在线视 | 成人教育av | 午夜伦理影院 | 国产欧美一区二区三区在线播放 | 99久久精品免费看国产四区 | 狠狠躁夜夜躁人人爽天天高潮 |