溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python筆記之facade模式

發(fā)布時(shí)間:2020-10-06 06:06:32 來源:腳本之家 閱讀:156 作者:谷雨yun 欄目:開發(fā)技術(shù)

facade模式,即門面模式,也稱外觀模式,這個(gè)模式的核心思想是使用facade對(duì)象為外部客戶端提供一個(gè)統(tǒng)一的訪問一組子系統(tǒng)的接口,即客戶端不會(huì)直接與各個(gè)子系統(tǒng)交互,而是通過facade對(duì)象與各個(gè)子系統(tǒng)進(jìn)行通信并使用子系統(tǒng)的相應(yīng)功能。

可以通過下面這個(gè)圖來理解facade模式:

Python筆記之facade模式

子系統(tǒng):各個(gè)子系統(tǒng)原則上都是獨(dú)立存在的,互不干涉的,重要的是它們都不會(huì)去關(guān)注facade對(duì)象,更不會(huì)去引用facade對(duì)象。

facade:facade對(duì)象負(fù)責(zé)將各個(gè)子系統(tǒng)組合成在一起,并為外部提供一個(gè)“舒適的外觀”和訪問接口。

客戶端:客戶端通過facade對(duì)象去和各個(gè)子系統(tǒng)進(jìn)行交互,不會(huì)直接去和各個(gè)子系統(tǒng)打交道。

簡(jiǎn)單示例:

class Shampoo:
 """子系統(tǒng):賣各種洗發(fā)露"""
 def __init__(self):
  print('We sell all kinds of shampoo!')

 def piaorou_500ml(self, number):
  print('This is 500ml piaorou shampoo! Total: %d' % number)


class WashingPowder:
 """子系統(tǒng):賣各種洗衣粉"""
 def __init__(self):
  print('We sell all kinds of washing powder!')

 def libai_3kg(self, number):
  print('This is 3kg libai washing powder! Total: %d' % number)


class Tissue:
 """子系統(tǒng):賣各種抽紙"""
 def __init__(self):
  print('We sell all kinds of tissue!')

 def jierou_200sheets(self, number):
  print('This is 200 sheets tissue! Total: %d' % number)


class Salesman:
 """facade:售貨員"""
 def __init__(self):
  self.shampoo = Shampoo()
  self.washing_powder = WashingPowder()
  self.tissue = Tissue()
  print('What can I help you?')

 def sale_for_family(self):
  """家庭套餐"""
  self.shampoo.piaorou_500ml(1)
  self.washing_powder.libai_3kg(2)
  self.tissue.jierou_200sheets(6)


class UncleLi:
 """客戶端:李大爺"""
 def __init__(self):
  print('I want bug something!')

 def buy_for_family(self):
  """直接從售貨員那里購(gòu)買家庭套餐"""
  sale_man = Salesman()
  sale_man.sale_for_family()

其他與facade模式思想相近的編程原則也可以參考下,但需要注意的是“原則”本身需要根據(jù)具體情況來靈活應(yīng)用,而不是一定要這么做:

最少知識(shí)原則:最少知識(shí)意味著需要盡量減少對(duì)象之間的交互,但是也需要注意以下幾點(diǎn):

  • 在設(shè)計(jì)系統(tǒng)時(shí),在創(chuàng)建每個(gè)對(duì)象時(shí),都需要多考查下會(huì)與之交互的類的數(shù)量以及交互的方式。
  • 避免多個(gè)對(duì)象彼此緊密耦合的情況。

迪米特法則:它是一個(gè)設(shè)計(jì)準(zhǔn)則,包含以下幾點(diǎn):

  • 每個(gè)單元對(duì)系統(tǒng)中其他單元知道得越少越好。
  • 每個(gè)單元只與其朋友交流。
  • 單元不應(yīng)該知道它操作的對(duì)象的內(nèi)部細(xì)節(jié)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI