這篇文章主要介紹了python3依賴倒置原則實例代碼分析的相關知識,內(nèi)容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇python3依賴倒置原則實例代碼分析文章都會有所收獲,下面我們一起來看看吧。
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于成都做網(wǎng)站、網(wǎng)站設計、余姚網(wǎng)絡推廣、重慶小程序開發(fā)公司、余姚網(wǎng)絡營銷、余姚企業(yè)策劃、余姚品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供余姚建站搭建服務,24小時服務熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com
針對園區(qū)停車信息,需要對各個公司提供的停車數(shù)據(jù)進行整合并錄入自家公司的大數(shù)據(jù)平臺
數(shù)據(jù)的錄入無外乎就是對數(shù)據(jù)的增刪改查
下面上一個常規(guī)的寫法(未符合依賴倒置),整合來自 長安和豐田 的停車數(shù)據(jù)
class Changan(object): def __init__(self): self.type = 'changan' def ca_add(self): print('%s 新增' % self.type) def ca_del(self): print('%s 刪除' % self.type) def ca_modify(self): print('%s 修改' % self.type) def ca_get(self): print('%s 查詢' % self.type) class Toyota(object): def __init__(self): self.type = 'fengtian' def tyt_add(self): print('%s 新增' % self.type) def tyt_del(self): print('%s 刪除' % self.type) def tyt_modify(self): print('%s 修改' % self.type) def tyt_get(self): print('%s 查詢' % self.type) class Data(object): def __init__(self, car): self.car = car def data_add(self): if self.car.type == 'changan': self.car.ca_add() else: self.car.tyt_add() def data_del(self): if self.car.type == 'changan': self.car.ca_del() else: self.car.tyt_del() def data_mofify(self): if self.car.type == 'changan': self.car.ca_modify() else: self.car.tyt_modify() def data_get(self): if self.car.type == 'changan': self.car.ca_get() else: self.car.tyt_get() if __name__ == '__main__': ca = Changan() tyt = Toyota() autosystem = Data(ca) autosystem.data_add() autosystem.data_del() autosystem.data_modify() autosystem.data_get() autosystem.car = tyt print('*' * 50) autosystem.data_add() autosystem.data_del() autosystem.data_modify() autosystem.data_get()
運行的結(jié)果如下
changan 新增
changan 刪除
changan 修改
changan 查詢
**************************************************
fengtian 新增
fengtian 刪除
fengtian 修改
fengtian 查詢
可以看到最后的Data類是一個簡單工廠,通過面向流程的方式對數(shù)據(jù)進行增刪改查,上層的Data類永遠都要依賴下層的Changan類和Toyota類,假設未來Changan類和Toyota類因為需求變更導致實現(xiàn)方式變了,那么Data類也會跟著改,或者未來又來一家新的廠商鈴木Suzuki,那么在Data又要多寫很多if else。這樣的改動對于程序員來說是致命的,每一次變動需要改動的地方都很多,問題油然而生。
遵循依賴倒置原則,根據(jù)
"程序要依賴于抽象接口,不要依賴于具體實現(xiàn)。"
通過changan、toyota這些類的公共性,把處理數(shù)據(jù)的方法通過接口抽象出來
import abc class DataProcessing(metaclass=abc.ABCMeta): """ 抽象類 抽象新增改查 """ @abc.abstractmethod def data_add(self, *args, **kwargs): pass @abc.abstractmethod def data_del(self, *args, **kwargs): pass @abc.abstractmethod def data_modify(self, *args, **kwargs): pass @abc.abstractmethod def data_get(self, *args, **kwargs): pass class Changan(DataProcessing): def __init__(self): self.type = 'changan' def data_add(self): print('%s 新增' % self.type) def data_del(self): print('%s 刪除' % self.type) def data_modify(self): print('%s 修改' % self.type) def data_get(self): print('%s 查詢' % self.type) class Toyota(DataProcessing): def __init__(self): self.type = 'fengtian' def data_add(self): print('%s 新增' % self.type) def data_del(self): print('%s 刪除' % self.type) def data_modify(self): print('%s 修改' % self.type) def data_get(self): print('%s 查詢' % self.type) class Data(object): def __init__(self, car): self.car = car def data_add(self): self.car.data_add() def data_del(self): self.car.data_del() def data_modify(self): self.car.data_modify() def data_get(self): self.car.data_get() if __name__ == '__main__': ca = Changan() tyt = Toyota() autosystem = Data(ca) autosystem.data_add() autosystem.data_del() autosystem.data_modify() autosystem.data_get() autosystem.car = tyt print('*' * 50) autosystem.data_add() autosystem.data_del() autosystem.data_modify() autosystem.data_get()
運行后結(jié)果依然為
changan 新增
changan 刪除
changan 修改
changan 查詢
**************************************************
fengtian 新增
fengtian 刪除
fengtian 修改
fengtian 查詢
以上可看出,增刪改查已經(jīng)抽象成DataProcessing里面的方法,以后不管Changan類和Toyota類怎么變動,或者需要新增一個Suzuki類什么的,上層的Data類都不用改變,if name == 'main' 后客戶端的調(diào)用也不需要怎么改動,代碼層次也更清晰,便于后續(xù)的擴展。
關于“python3依賴倒置原則實例代碼分析”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“python3依賴倒置原則實例代碼分析”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。