Day8 接口與歸一化設計

接口:在程序的使用中,我不能把程序的主體直接提供給使用者,通常是提供一個接口。

爲何要使用接口:java

  

   1,接口提取了一羣共同的函數,能夠把接口當作一個函數的集合。python

   2,讓子類去實現接口中的函數。git

 

歸一化的好處:github

  歸一化讓使用者無需關心對象的類是什麼,只須要知道這些對象都具有什麼功能就能夠了。設計模式

  歸一化使得高層的外部使用者能夠不加區分的處理全部接口兼容的對象集合。函數

 

 

繼承的兩種用途:ui

一:繼承基類的方法,而且作出本身的改變或者擴展(代碼重用):實踐中,繼承的這種用途意義並不很大,甚至經常是有害的。由於它使得子類與基類出現強耦合。spa

二:聲明某個子類兼容於某基類,定義一個接口類(模仿java的Interface),接口類中定義了一些接口名(就是函數名)且並未實現接口的功能,子類繼承接口類,而且實現接口中的功能.net

 

 

模擬接口的兩種方式:設計

1,使用模塊

  在python中根本就沒有一個叫作interface的關鍵字,若是非要去模仿接口的概念

  能夠藉助第三方模塊:

  http://pypi.python.org/pypi/zope.interface

  twisted的twisted\internet\interface.py裏使用zope.interface

  文檔https://zopeinterface.readthedocs.io/en/latest/

  設計模式:https://github.com/faif/python-patterns

 

2,用抽象類來模擬

 1 class Interface:#定義接口Interface類來模仿接口的概念,python中壓根就沒有interface關鍵字來定義一個接口。
 2     def read(self): #定接口函數read
 3         pass
 4 
 5     def write(self): #定義接口函數write
 6         pass
 7 
 8 
 9 class Txt(Interface): #文本,具體實現read和write
10     def read(self):
11         print('文本數據的讀取方法')
12 
13     def write(self):
14         print('文本數據的寫方法')
15 
16 class Sata(Interface): #磁盤,具體實現read和write
17     def du(self):
18         print('硬盤數據的讀取方法')
19 
20     def write(self):
21         print('硬盤數據的寫方法')
22 
23 class Process(Interface):
24     def read(self):
25         print('進程數據的讀取方法')
26 
27     def xie(self):
28         print('進程數據的寫方法')
29 
30 
31 
32 t=Txt()
33 s=Sata()
34 p=Process()
35 
36 
37 t.read()
38 s.read()
39 p.read()
相關文章
相關標籤/搜索