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

設計模式——把類作為參數的抽象工廠模式

開發 前端
大家可能對工廠模式比較熟悉,在工廠模式當中封裝了實例的創建邏輯。主要的用途一般是將一些復雜的類的創建過程整合在一起,通過參數控制,這樣使用者可以較簡單地獲得實例。

[[358276]]

今天給大家介紹一個非常簡單的設計模式,一學就會,非常好用。

這個模式叫做抽象工廠模式,大家可能對工廠模式比較熟悉,在工廠模式當中封裝了實例的創建邏輯。主要的用途一般是將一些復雜的類的創建過程整合在一起,通過參數控制,這樣使用者可以較簡單地獲得實例。

抽象工廠

抽象工廠模式和工廠模式類似,只不過更加抽象了一層。在創建實例的時候,不是通過參數來控制,而是直接傳入想要創建的類。這一點其實也是Python的特性,一切皆是對象,一切皆可傳參,類本身也是一個對象,類也是可以傳參的。所以我們可以把一個類直接傳入工廠,工廠通過類來創建實例。

我們來用代碼簡單演示一下:

  1. class AbstractFactory: 
  2.     def __init__(self, cls): 
  3.         self.cls = cls 
  4.          
  5.     def build(self, *args, **kw): 
  6.         return self.cls(*args, **kw) 

這段代碼大家都能看懂,但是這其實也不能完全叫做抽象工廠,因為體現不出來抽象。這里的抽象主要是把工廠當做了一個更高階的抽象類,有點像是抽象類的反向使用。

我們一般使用抽象類都是這樣:

  1. import abc 
  2.  
  3. class AbstractClass: 
  4.     def __init__(self): 
  5.         pass 
  6.      
  7.     @abc.abstractmethod 
  8.     def run(self, *args, **kw): 
  9.         pass 

然后它的派生類再去實現抽象類當中定義的抽象方法,而這里的順序則是反的。父類當中的邏輯其實也是定好的,只是它在具體執行的時候是調用傳入的子類實例實現的。

為了更好說明,我們來看一個例子吧:

  1. class PetCollection(object): 
  2.  
  3.     def __init__(self, animal): 
  4.         self.pet_generator = animal 
  5.         self.pet = self.pet_generator() 
  6.      
  7.     def speak(self): 
  8.         self.pet.speak() 
  9.  
  10.     def show_pet(self): 
  11.         pet = self.pet 
  12.         print('Pet\'s name is {}'.format(pet)) 
  13.         print('It says: {}!'.format(pet.speak())) 
  14.  
  15.  
  16. class Dog(object): 
  17.     def speak(self): 
  18.         return 'woof' 
  19.  
  20.     def __str__(self): 
  21.         return 'dog' 
  22.  
  23.  
  24. class Cat(object): 
  25.     def speak(self): 
  26.         return 'meow' 
  27.  
  28.     def __str__(self): 
  29.         return 'cat' 
  30.  
  31. if __name__ == '__main__'
  32.     pet = PetCollection(Dog) 
  33.     pet.show_pet() 

在這個例子當中,Dog和Cat是子類,PetCollection是父類。我們可以發現在父類當中也實現了speak這個方法,但是它是調用子類的speak實現的。也就是說凡是擁有speak這個類的子類都可以用來創建PetCollection,這個PetCollection相當于一個抽象的通用類,這樣我們在使用的時候可以用它來集成很多邏輯,簡化操作。

我第一次看這個設計模式的時候,覺得普普通通,不過是把類當做參數而已。但是之后又看了一次,又有了新的理解,這不也是抽象類的反向使用嗎?其實代碼的核心就只有邏輯,所謂的設計模式也不過是前人總結出的經驗而已。真正有價值的并不是這個模式當中的代碼怎么寫,而是核心的邏輯,這些融會貫通了,以后也不難設計出我們自己的模式來。

本文轉載自微信公眾號「TechFlow」,可以通過以下二維碼關注。轉載本文請聯系TechFlow公眾號。

 

責任編輯:武曉燕 來源: TechFlow
相關推薦

2021-03-06 22:50:58

設計模式抽象

2021-09-29 13:53:17

抽象工廠模式

2020-10-19 09:28:00

抽象工廠模式

2009-01-15 10:55:29

JavaScript設計模式抽象工廠

2011-07-28 09:50:58

設計模式

2024-09-14 08:24:44

設計模式抽象工廠模式JDK

2024-03-06 13:19:19

工廠模式Python函數

2020-08-21 07:23:50

工廠模式設計

2022-01-12 13:33:25

工廠模式設計

2011-11-17 16:03:05

Java工廠模式Clojure

2023-08-07 06:30:15

抽象工廠模式軟件設計模式

2020-09-14 17:26:48

抽象工廠模式

2024-07-31 08:12:33

2010-04-19 09:30:00

工廠模式PHP設計模式

2021-07-06 08:59:18

抽象工廠模式

2022-05-09 08:04:50

工廠模式設計模式

2013-11-26 16:29:22

Android設計模式

2010-10-09 09:25:35

Python工廠模式

2015-11-03 09:43:43

avascript設計模式工廠模式

2019-08-16 10:46:46

JavaScript工廠模式抽象工廠模式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲最大成人综合 | 一本色道久久综合亚洲精品高清 | 久久人爽爽人爽爽 | 国产免费av在线 | 亚洲一区视频在线 | 久久久久久国模大尺度人体 | 中文字幕一区二区三区不卡 | 日日骚视频 | 亚洲午夜视频 | 亚洲欧美激情视频 | 日韩国产中文字幕 | 亚洲精品乱码久久久久v最新版 | 国产一区二区三区视频在线观看 | 久久精彩视频 | 亚洲日日操 | 亚洲福利在线观看 | 久久久国产精品入口麻豆 | 91欧美| 国产1区2区3区 | 中文字幕一级 | 国产在线看片 | 黑人中文字幕一区二区三区 | 成人久久网 | 九九免费视频 | 国产精品久久久久久福利一牛影视 | 尤物视频在线免费观看 | 最新日韩欧美 | 欧美电影在线 | 国产精品毛片一区二区在线看 | 国产精品一二区 | 男人久久天堂 | 精品粉嫩aⅴ一区二区三区四区 | 日韩第一区| 成人国产精品视频 | 精品国产一区二区三区免费 | 国产精品久久久久久中文字 | 天天成人综合网 | 91免费看片 | 中文字幕在线观看一区二区 | 欧美性区 | 国产一区二区三区四区 |