Python與設計模式--適配器模式

7-Python與設計模式–適配器模式

一、外包人員系統兼容

假設某公司A與某公司B需要合作,公司A需要訪問公司B的人員信息,但公司A與公司B協議接口不同,
該如何處理?先將公司A和公司B針對各自的人員信息訪問系統封裝了對象接口。
class ACpnStaff:name=""id=""phone=""def __init__(self,id):self.id=iddef getName(self):print "A protocol getName method...id:%s"%self.idreturn self.namedef setName(self,name):print "A protocol setName method...id:%s"%self.idself.name=namedef getPhone(self):print "A protocol getPhone method...id:%s"%self.idreturn self.phonedef setPhone(self,phone):print "A protocol setPhone method...id:%s"%self.idself.phone=phoneclass BCpnStaff:name=""id=""telephone=""def __init__(self,id):self.id=iddef get_name(self):print "B protocol get_name method...id:%s"%self.idreturn self.namedef set_name(self,name):print "B protocol set_name method...id:%s"%self.idself.name=namedef get_telephone(self):print "B protocol get_telephone method...id:%s"%self.idreturn self.telephonedef set_telephone(self,telephone):print "B protocol get_name method...id:%s"%self.idself.telephone=telephone

為在A公司平臺復用B公司接口,直接調用B公司人員接口是個辦法,但會對現在業務流程造成不確
定的風險。為減少耦合,規避風險,我們需要一個幫手,就像是轉換電器電壓的適配器一樣,
這個幫手 就是協議和接口轉換的適配器。 適配器構造如下:

class CpnStaffAdapter:b_cpn=""def __init__(self,id):self.b_cpn=BCpnStaff(id)def getName(self):return self.b_cpn.get_name()def getPhone(self):return self.b_cpn.get_telephone()def setName(self,name):self.b_cpn.set_name(name)def setPhone(self,phone):self.b_cpn.set_telephone(phone)

適配器將B公司人員接口封裝,而對外接口形式與A公司人員接口一致,達到用A公司人員接口訪問B公司人員信息的效果。
業務示例如下:

if __name__=="__main__":acpn_staff=ACpnStaff("123")acpn_staff.setName("X-A")acpn_staff.setPhone("10012345678")print "A Staff Name:%s"%acpn_staff.getName()print "A Staff Phone:%s"%acpn_staff.getPhone()bcpn_staff=CpnStaffAdapter("456")bcpn_staff.setName("Y-B")bcpn_staff.setPhone("99987654321")print "B Staff Name:%s"%bcpn_staff.getName()print "B Staff Phone:%s"%bcpn_staff.getPhone()

打印如下:

A protocol setName method…id:123 A protocol setPhone method…id:123
A protocol getName method…id:123 A Staff Name:X-A A protocol
getPhone method…id:123 A Staff Phone:10012345678 B protocol set_name
method…id:456 B protocol get_name method…id:456 B protocol
get_name method…id:456 B Staff Name:Y-B B protocol get_telephone
method…id:456 B Staff Phone:99987654321

二、適配器模式

適配器模式定義如下:將一個類的接口變換成客戶端期待的另一種接口,從而使原本因接口不匹配而無法在一起
工作的兩個類能夠在一起工作。適配器模式和裝飾模式有一定的相似性,都起包裝的作用,但二者本質上又是不
同的,裝飾模式的結果,是給一個對象增加了一些額外的職責,而適配器模式,則是將另一個對象進行了“偽裝”。適配器可以認為是對現在業務的補償式應用,所以,盡量不要在設計階段使用適配器模式,
在兩個系統需要兼容時可以考慮使用適配器模式。

三、適配器模式的優點和使用場景

優點:
1、適配器模式可以讓兩個接口不同,甚至關系不大的兩個類一起運行;
2、提高了類的復用度,經過“偽裝”的類,可以充當新的角色;
3、適配器可以靈活“拆卸”。

應用場景:
1、不修改現有接口,同時也要使該接口適用或兼容新場景業務中,適合使用適配器模式。
例如,在一個嵌入式系統中,原本要將數據從Flash讀入,現在需要將數據從磁盤讀入,
這種情況可以使用適配器模式,將從磁盤讀入數據的接口進行“偽裝”,以從Flash中讀數據的接口形
式,從磁盤讀入數據。

四、適配器模式的缺點

1、適配器模式與原配接口相比,畢竟增加了一層調用關系,所以,在設計系統時,不要使用適配器模式。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/166314.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166314.shtml
英文地址,請注明出處:http://en.pswp.cn/news/166314.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

易點易動固定資產管理系統:全生命周期管理的理想選擇

在現代企業中,固定資產管理是一項至關重要的任務。為了確保企業的資產安全、提高資產利用率,全面管理固定資產的生命周期至關重要。易點易動固定資產管理系統為企業提供了一種全面的解決方案,實現了從固定資產申購、采購、入庫、領用、退庫、…

linux 內存回收mglru算法代碼注釋2

mglru與原lru算法的兼容 舊的lru算法有active與inactive兩代lru,可參考linux 內存回收代碼注釋(未實現多代lru版本)-CSDN博客 新的算法在引入4代lru的同時,還引入了tier的概念。 新舊算法的切換的實現在lru_gen_change_state&a…

ELK企業級日志分析平臺——elasticsearch

集群部署 文檔:https://www.elastic.co/guide/en/elasticsearch/reference/7.6/index.html 下載:https://elasticsearch.cn/download/ 主機 ip 角色 k8s1 192.168.92.11 cerebro elk1 192.168.92.31 elasticsearch elk2 192.168.92.32 elasti…

數據庫實驗五 數據庫設計

數據庫實驗五 數據庫設計 一、實驗目的二、實驗內容三、實驗內容四、驗證性實驗五、設計性實驗 一、實驗目的 1.了解E-R圖構成要素以及各要素圖元。 2.掌握概念模型E-R圖的繪制方法。 3.掌握概念模型向邏輯模型的轉換原則和步驟。 4.運用sql編程實現 二、實驗內容 1.選取一個…

線段樹---數據結構學習

線段樹的教程可以參照線段樹 這里推薦 https://oi-wiki.org/ 這個網站,數據結構講的非常透。 線段樹學了很多次忘了很多次,這次打算記錄一下以后方便回顧(leetcode這類題遇見的不算特別多)。 樣板例題 leltcode-307 #題目樣板 class NumArray {private …

醫院手術麻醉信息系統全套源碼,自主版權,支持二次開發

醫院手術麻醉信息系統全套商業源碼,自主版權,支持二次開發 手術麻醉信息系統是HIS產品的中的一個組成部分,主要應用于醫院的麻醉科,屬于電子病歷類產品。醫院麻醉監護的功能覆蓋整個手術與麻醉的全過程,包括手術申請與…

人工智能中的文本分類:技術突破與實戰指導

在本文中,我們全面探討了文本分類技術的發展歷程、基本原理、關鍵技術、深度學習的應用,以及從RNN到Transformer的技術演進。文章詳細介紹了各種模型的原理和實戰應用,旨在提供對文本分類技術深入理解的全面視角。 關注TechLead,分…

Hadoop發行版 Cloudera CDH 6.3.2及CM 安裝包下載(阿里云盤 不限速)

CDH(全稱Cloudera’s Distribution, including Apache Hadoop)是由Cloudera公司構建的Hadoop穩定發行版,不僅含有 Apache Hadoop,還整合了Hive、Spark等組件。 由于CDH已停止維護,且Cloudera不再為CDH提供免費的下載服…

git 使用過程錯誤集合

文章目錄 1、git-credential-manager-core was renamed to git-credential-manager2、credential-manager-core is not a git command. See git --help. 1、git-credential-manager-core was renamed to git-credential-manager 出現以下提示建議盡快更新您的 Git 配置以使用新…

回歸預測 | MATLAB實現SCN隨機配置網絡多輸入單輸出回歸預測

回歸預測 | MATLAB實現SCN隨機配置網絡多輸入單輸出回歸預測 目錄 回歸預測 | MATLAB實現SCN隨機配置網絡多輸入單輸出回歸預測效果一覽基本介紹程序設計參考資料 效果一覽 基本介紹 Matlab實現SCN隨機配置網絡多變量回歸預測 1.data為數據集,7個輸入特征&#xff0…

基于Python實現汽車銷售數據可視化+預測【500010086.1】

導入模塊 import numpy as np import pandas as pd from pylab import mpl import plotly.express as px import matplotlib.pyplot as plt import seaborn as sns設置全局字體 plt.rcParams[font.sans-serif][kaiti]獲取數據 total_sales_df pd.read_excel(r"./data/中…

獨孤思維:看了那么多課程,還在問怎么賺錢的都是廢物

你捫心自問: 為什么自己看了那么多賺錢項目,買了那么多課程,對標了那么多大咖,依舊賺不到錢? 是自己智商欠缺嗎,是自己能力不行嗎,是自己沒有時間嗎? 智商欠缺,沒有誰…

機器學習第13天:模型性能評估指標

??主頁 Nowl 🔥專欄《機器學習實戰》 《機器學習》 📑君子坐而論道,少年起而行之 文章目錄 交叉驗證 保留交叉驗證 k-折交叉驗證 留一交叉驗證 混淆矩陣 精度與召回率 介紹 精度 召回率 區別 使用代碼 偏差與方差 介紹 區…

zerotier 搭建 moon中轉服務器 及 自建planet

搭建moon 服務器 環境準備 # 安裝依賴 yum install wget gcc gcc-c git -y yum install json-devel -y# 下載及安裝 curl -s https://install.zerotier.com/ | sudo bash節點ID 配置 配置moon.json文件 cd /var/lib/zerotier-one/# 導出依賴 zerotier-idtool initmoon ide…

SpringBoot項目連接,有Kerberos認證的Kafka

在連接Kerberos認證kafka之前,需要了解Kerberos協議 二、什么是Kerberos協議 Kerberos是一種計算機網絡認證協議 ,其設計目標是通過密鑰系統為網絡中通信的客戶機(Client)/服務器(Server)應用程序提供嚴格的身份驗證服務,確保通信雙方身份的真…

Spring Boot 升級3.x 指南

Spring Boot 升級3.x 指南 1. 升級思路 先創建一個parent項目&#xff0c;打包類型為pom&#xff0c;繼承自spring boot的parent項目 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId&…

歷時三個月,我發布了一款外賣返錢小程序

近幾年&#xff0c;推廣外賣紅包爆火&#xff0c;各種推廣外賣紅包的公眾號層出不窮。于是&#xff0c;我就在想外賣紅包究竟是怎么一回事。就這樣&#xff0c;我帶著問題開始了關于外賣紅包的研究。 在研究的過程中&#xff0c;我開始了解商品聯盟、推廣分成、cps等一系列相關…

網絡攻擊當搭配什么產品比較好

網絡攻擊無處不在&#xff0c;當要時刻謹記 2014年&#xff0c;索尼影業受到黑客攻擊&#xff0c;導致公司內部文件和電子郵件泄露。 2015年&#xff0c;美國聯邦政府的辦公人員信息遭到盜竊&#xff0c;影響了超過2100萬人的個人信息。 2016年&#xff0c;Yahoo的3億用戶賬…

java 中集合之一【map】,map循環

在Java中&#xff0c;常用的集合框架有以下幾個&#xff1a; 1、List&#xff08;列表&#xff09;&#xff1a;List是有序的集合&#xff0c;允許包含重復元素。常用的實現類有ArrayList和LinkedList。ArrayList是基于動態數組實現的&#xff0c;支持快速隨機訪問&#xff1b;…

android之圖片選擇器--pictureselector

推薦一個安卓圖片/視頻/文件選擇器。簡單好用。 不多廢話。直接上代碼&#xff1a; 首先&#xff0c;添加依賴&#xff1a; //圖片選擇器api io.github.lucksiege:pictureselector:v3.11.1//圖片壓縮api io.github.lucksiege:compress:v3.11.1//圖片裁剪api io.github.lucksie…