Python設計模式-介面卡模式

小屋子大俠發表於2017-06-22

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、介面卡模式與原配介面相比,畢竟增加了一層呼叫關係,所以,在設計系統時,不要使用介面卡模式。

備註

該模式要謹慎使用,模式的亂用不如不用,能夠預見解決的就解決。

相關文章