Python設計模式-介面卡模式
Python設計模式-介面卡模式
基於Python3.5.2,程式碼如下
#coding:utf-8
class ACpnStaff:
name = ""
id = ""
phone = ""
def __init__(self,id):
self.id = id
def getName(self):
print("A protocol getName method ..id:%s"%self.id)
return self.name
def setName(self,name):
print("A protocol setName method ..id:%s" % self.id)
self.name = name
def getPhone(self):
print("A protocol getPhone method ..id:%s" % self.id)
return self.phone
def setPhone(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
def getName(self):
print("B protocol getName method ..id:%s" % self.id)
return self.name
def setName(self, name):
print("B protocol setName method ..id:%s" % self.id)
self.name = name
def getPhone(self):
print("B protocol getPhone method ..id:%s" % self.id)
return self.telephone
def setPhone(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)
def getName(self):
return self.b_cpn.getName()
def getPhone(self):
return self.b_cpn.getPhone()
def setName(self,name):
self.b_cpn.setName(name)
def setPhone(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 設計模式-介面卡模式Python設計模式
- python設計模式之介面卡模式Python設計模式
- 通俗 Python 設計模式——介面卡模式Python設計模式
- 設計模式----介面卡模式設計模式
- 設計模式-介面卡模式設計模式
- 設計模式:介面卡模式設計模式
- 【設計模式】介面卡模式設計模式
- 設計模式--介面卡模式/代理模式設計模式
- JavaScript 設計模式 —— 介面卡模式JavaScript設計模式
- java設計模式-介面卡模式Java設計模式
- 設計模式(七)介面卡模式設計模式
- 設計模式之介面卡模式設計模式
- 設計模式之【介面卡模式】設計模式
- 設計模式(五):介面卡模式設計模式
- PHP設計模式_介面卡模式PHP設計模式
- 設計模式(十四):介面卡模式設計模式
- Java設計模式之介面卡設計模式Java設計模式
- PHP 設計模式之介面卡模式PHP設計模式
- Javascript 設計模式之介面卡模式JavaScript設計模式
- 設計者模式之介面卡模式模式
- Java設計模式之介面卡模式Java設計模式
- 設計模式【6.1】-- 初探介面卡模式設計模式
- Java設計模式(6)----------介面卡模式Java設計模式
- Java 設計模式(一)《介面卡模式》Java設計模式
- PHP設計模式(2)—— 介面卡模式PHP設計模式
- 極簡設計模式-介面卡模式設計模式
- 設計模式系列之「介面卡模式」設計模式
- php模式設計之 介面卡模式PHP模式
- JS 設計模式 十(介面卡模式)JS設計模式
- Java設計模式7:介面卡模式Java設計模式
- 介面卡設計模式設計模式
- 設計模式 #4 (裝飾器模式、介面卡模式)設計模式
- 23種設計模式之介面卡模式設計模式
- PHP設計模式-Adapter 介面卡模式PHP設計模式APT
- 設計模式第五講-介面卡模式設計模式
- 設計模式【6.2】-- 再聊聊介面卡模式設計模式
- Java設計模式之(八)——介面卡模式Java設計模式
- C#設計模式之介面卡模式C#設計模式