Python設計模式 介面卡模式

2021-08-02 21:25:54 字數 3101 閱讀 8023

基於python3.5.2,**如下

#coding:utf-8

class

acpnstaff:

name = ""

id = ""

phone = ""

def__init__

(self,id):

self.id = id

defgetname

(self):

print("a protocol getname method ..id:%s"%self.id)

return self.name

defsetname

(self,name):

print("a protocol setname method ..id:%s" % self.id)

self.name = name

defgetphone

(self):

print("a protocol getphone method ..id:%s" % self.id)

return self.phone

defsetphone

(self,phone):

print("a protocol setphone method ..id:%s" % self.id)

self.phone = phone

class

bcpnstaff:

name = ""

id = ""

telephone = ""

def__init__

(self, id):

self.id = id

defgetname

(self):

print("b protocol getname method ..id:%s" % self.id)

return self.name

defsetname

(self, name):

print("b protocol setname method ..id:%s" % self.id)

self.name = name

defgetphone

(self):

print("b protocol getphone method ..id:%s" % self.id)

return self.telephone

defsetphone

(self, telephone):

print("b protocol setphone method ..id:%s" % self.id)

self.telephone = telephone

class

cpnstaffadapter:

b_cpn = ""

def__init__

(self,id):

self.b_cpn = bcpnstaff(id)

defgetname

(self):

return self.b_cpn.getname()

defgetphone

(self):

return self.b_cpn.getphone()

defsetname

(self,name):

self.b_cpn.setname(name)

defsetphone

(self,phone):

self.b_cpn.setphone(phone)

if __name__ == "__main__":

acpn_staff = acpnstaff("123")

acpn_staff.setphone("wuzi")

acpn_staff.setname("wuzi1")

bcpn_staff = cpnstaffadapter("456")

bcpn_staff.setname("wuzib")

bcpn_staff.setphone("phoneb")

將乙個類的介面變換成客戶端期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。介面卡模式和裝飾模式有一定的相似性,都起包裝的作用,但二者本質上又是不同的,裝飾模式的結果,是給乙個物件增加了一些額外的職責,而介面卡模式,則是將另乙個物件進行了「偽裝」。兩個類做的事情相,但具有不同的介面時要使用該模式,可以使客戶端統一呼叫同一介面。介面卡通常是對現在業務的補償式應用,在設計階段盡量不要用介面卡模式。
1、在不修改現有介面,同時也要使該介面適用或相容新場景業務中,適合適用介面卡模式。
**中,是實現在a公司中呼叫b公司的方法。由於a公司與b公司所採用的協議不同,需要對介面進行包裝

1、在a公司中的員工資訊,使用a公司的協議來實現資訊插入,查詢等,由acpnstaff類來實現;

2、在b公司中的員工資訊,使用b公司的協議來實現資訊插入、查詢等,由bcpnstaff類來實現;

3、在a公司中呼叫b的方法介面,通過cpnstaffadapter類,在初始化的時候就建立乙個b公司員工物件,在通過介面卡類setname(),setphone()等方法,直接呼叫b物件的對應方法,從而實現對b物件的操作。

a protocol setphone method ..id:123

a protocol setname method ..id:123

b protocol setname method ..id:456

b protocol setphone method ..id:456

通過執行結果,顯示通過cpnstaffadapter例項生成的物件,能夠對b物件進行相應的讀寫操作。從而在不修改b的基礎上完成,在a處呼叫b介面。

優點:

1、介面卡模式可以讓兩個介面不同,甚至關係不大的兩個類一起執行;

2、提高了類的復用度,經過「偽裝」的類,可以充當新的角色;

3、介面卡可以靈活「拆卸」。

缺點:
1、介面卡模式與原配介面相比,畢竟增加了一層呼叫關係,所以,在設計系統時,不要使用介面卡模式。
該模式要謹慎使用,模式的亂用不如不用,能夠預見解決的就解決。

python 設計模式 介面卡模式

介面卡模式 adapter pattern 是一種結構型設計模式,幫助我們實現兩個不相容的介面之前的相容 樣例 電子商務系統支援不同國家的貨幣交易,需要乙個介面卡,將其餘的貨幣轉化成一種貨幣最終進行交易。設計模式一直遵從開放 封閉的原則 open close principle 開放封閉原則是物件導...

Python設計模式 介面卡模式

實現兩個或以上不相容介面之間的相容 某個產品已製造出來之後,需要應對新的需求,希望其仍然有效 不相容介面是他方的或者是老舊的,無法訪問其原始碼或者修改起來不切實際,並且違反開放 封閉原則。放開 封閉原則 物件導向設計的基本原則之一,宣告乙個軟體實體應該對擴充套件是開放的,對修改則是封閉的,意味著無需...

設計模式 介面卡模式 類介面卡 物件介面卡

乙個小例子,便於理解,上 這是我們造的。現在想用這個方法。public class adaptee 類介面卡。對我們想要的方法封裝一下,target就能像之前一樣,呼叫request方法即可。public class adapter1 extends adaptee implements targe...