自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一篇學(xué)會(huì)抽象工廠模式

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

[[409513]]

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

意圖

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

主要解決

解決接口選擇問題

關(guān)鍵代碼

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

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

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

缺點(diǎn)

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

使用場(chǎng)景

需要生成不同類型的產(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} 

其對(duì)應(yīng)的產(chǎn)品族對(duì)應(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* 用于生成對(duì)應(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)品族對(duì)應(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)對(duì)應(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í)工廠,生成對(duì)應(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 * 用于生成對(duì)應(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            //生成對(duì)應(yīng)貓的工廠 
  9.  9            return new CatFactory(); 
  10. 10        }else if ("DOG".equals(type.toUpperCase())){ 
  11. 11            //生成對(duì)應(yīng)狗工廠 
  12. 12            return new DogFactory(); 
  13. 13        } 
  14. 14        return null
  15. 15    } 
  16. 16 
  17. 17} 

測(cè)試:

  1.  1/** 
  2.  2 * 測(cè)試類 
  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} 

 

責(zé)任編輯:武曉燕 來源: 我好困啊
相關(guān)推薦

2021-05-11 08:54:59

建造者模式設(shè)計(jì)

2023-05-05 06:39:52

Java工廠設(shè)計(jì)模式

2021-10-26 10:40:26

代理模式虛擬

2022-01-02 08:43:46

Python

2022-02-07 11:01:23

ZooKeeper

2021-03-06 22:50:58

設(shè)計(jì)模式抽象

2020-10-19 09:28:00

抽象工廠模式

2021-09-29 13:53:17

抽象工廠模式

2021-07-02 08:51:29

源碼參數(shù)Thread

2021-07-16 22:43:10

Go并發(fā)Golang

2021-09-28 08:59:30

復(fù)原IP地址

2022-04-12 08:30:52

回調(diào)函數(shù)代碼調(diào)試

2022-10-20 07:39:26

2021-10-27 09:59:35

存儲(chǔ)

2022-03-11 10:21:30

IO系統(tǒng)日志

2023-03-13 21:38:08

TCP數(shù)據(jù)IP地址

2021-10-29 07:35:32

Linux 命令系統(tǒng)

2021-10-14 10:22:19

逃逸JVM性能

2023-11-01 09:07:01

Spring裝配源碼

2021-04-29 10:18:18

循環(huán)依賴數(shù)組
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)