【Python筆記-設計模式】適配器模式

一、說明

適配器模式是一種結構型模式,它使接口不兼容的對象能夠相互合作

(一) 解決問題

主要解決接口不兼容問題

(二) 使用場景

  • 當系統需要使用現有的類,但類的接口不符合需求時
  • 當需要一個統一的輸出接口,但輸入類型不可預知時
  • 當需要創建一個可以復用的類,使得該類可以與其他不相關的類或不可預見的類協同工作時

二、結構

  1. 客戶端(Client)是包含當前程序業務邏輯的類。
  2. 客戶端接口(Client Interface)描述了其他類與客戶端代碼合作時必須遵循的協議。
  3. 服務(Service)中有一些功能類(通常來自第三方或遺留系統)。客戶端與其接口不兼容,因此無法直接調用其功能。
  4. 適配器(Adapter)是一個可以同時與客戶端和服務交互的類:它在實現客戶端接口的同時封裝了服務對象。適配器接受客戶端通過適配器接口發起的調用,并將其轉換為適用于被封裝服務對象的調用。
  5. 客戶端代碼只需通過接口與適配器交互即可,無需與具體的適配器類耦合。因此,你可以向程序中添加新類型的適配器而無需修改已有代碼。這在服務類的接口被更改或替換時很有用:你無需修改客戶端代碼就可以創建新的適配器類。

三、偽代碼

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__doc__ = """
適配器模式例:不同國家的電源插頭不同,可通過適配器使用不同國家的插頭進行供電
"""class ChinaPlug:"""定義中國的插頭"""@staticmethoddef power_supply():return "中國的兩腳插頭供電中..."class USPlug:"""定義美國的插頭"""@staticmethoddef power_supply():return "美國的兩腳插頭供電中..."class Adapter:"""定義適配器,支持使用多類插頭"""def __init__(self, plug):self.plug = plugdef power_supply(self):return f"適配器使用{self.plug.__class__.__name__}供電中..."# 客戶端代碼
if __name__ == "__main__":"""美國的兩腳插頭供電中...中國的兩腳插頭供電中...------------------------------適配器使用ChinaPlug供電中...適配器使用USPlug供電中..."""us_plug = USPlug()china_plug = ChinaPlug()print(us_plug.power_supply())print(china_plug.power_supply())print("-" * 30)adapters = [Adapter(china_plug), Adapter(us_plug)]for adapter in adapters:print(adapter.power_supply())

四、優缺點

優點

  • 兼容性:可以讓原本不兼容的接口協同工作,提高系統的兼容性
  • 復用性:可以復用現有的類,無需修改原有代碼,符合開閉原則

缺點

  • 增加了系統的復雜性:需要新增一系列接口和類。 有時直接更改服務類使其與其他代碼兼容會更簡單。

?跳轉主頁:【Python筆記】設計模式-CSDN博客

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

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

相關文章

查詢數據庫的編碼集Oracle,MySQL

1、查詢數據庫的編碼集Oracle,MySQL 1.1、oracle select * from v$nls_parameters where parameterNLS_CHARACTERSET; 查詢版本:SELECT * FROM v$version 2、MySQL編碼集 SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM information_schema.SC…

【了解機器學習的定義與發展歷程】

曾夢想執劍走天涯,我是程序猿【AK】 目錄 簡述概要知識圖譜 簡述概要 了解機器學習的定義與發展歷程 知識圖譜 機器學習(Machine Learning,ML)是一門跨學科的學科,它使用計算機模擬或實現人類學習行為,通…

路由器的端口映射如何設置?

路由器的端口映射設置是網絡連接中常用的配置功能,通過將外部網絡訪問請求映射到內部設備,實現局域網內設備的遠程訪問。本文將介紹如何進行路由器的端口映射設置,并以【天聯】組網產品為例進行說明。 【天聯】組網產品介紹 【天聯】組網是一…

css3d制作正方體

使用css3d技術 &#xff0c;制作一個可以動態動畫的正方體模型 效果圖&#xff1a; 代碼如下&#xff1a; <!DOCTYPE html> <html> <head><style>/* 設置高度寬度100%并且左右居中、上下居中 */html,body {width: 100%;height: 100%;display: flex…

RENISHAW雷尼紹雙讀數頭系統應用分享

在精密回轉運動控制中&#xff0c;大多數場合都會對系統的回轉定位精度有嚴格的要求&#xff0c;RENISHAW雷尼紹圓光柵系統&#xff08;RESM增量和RESA絕對值&#xff09;對于回轉角度的反饋測量方案能有效的解決運動控制對回轉精度的需求。但是配置單個讀數頭的圓光柵系統的精…

C#最優隊列最小堆小頂堆大頂堆小根堆大根堆PriorityQueue的使用

最優隊列有多種叫法&#xff0c;什么小根堆&#xff0c;大根堆&#xff0c;小頂堆&#xff0c;大頂堆。 隊列分多種&#xff0c;線性隊列&#xff08;簡單隊列&#xff09;&#xff0c;循環隊列&#xff0c;最優隊列等等。 最優隊列&#xff0c;可以看作堆疊箱子&#xff0c;…

3分鐘看懂設計模式01:策略模式

一、什么是策略模式 定義一些列算法類&#xff0c;將每一個算法封裝起來&#xff0c;并讓它們可以互相替換。 策略模式讓算法獨立于使用它的客戶而變化&#xff0c;是一種對象行為型模式。 以上是策略模式的一般定義&#xff0c;屬于是課本內容。 在沒有真正理解策略模式之…

簡單幾步通過DD工具把云服務器系統Linux改為windows

簡單幾部通過DD安裝其他系統&#xff0c;當服務器的web控制臺沒有我們要裝的系統&#xff0c;就需要通過DD&#xff08;Linux磁盤&#xff09;工具來更改系統&#xff0c;&#xff08;已知支持KVM系統&#xff09; 本文如何簡單的更換系統&#xff0c;不通過web控制臺來更換&a…

mysql開啟遠程訪問并開啟3306端口

登陸mysql mysql -u root -p設置允許訪問的地址 如果你想允許用戶root從ip為192.168.1.123的主機連接到mysql服務器&#xff0c;并使用password密碼登錄。&#xff08;根據情況自行替換&#xff09; GRANT ALL PRIVILEGES ON *.* TO root192.168.1.123 IDENTIFIED BY passwo…

Python奇幻之旅(從入門到入獄高級篇)——面相對象進階【中】

目錄 2. 面向對象進階 2.1. 成員 2.2. 變量 2.2. 方法 2.4. property屬性 2.5. 成員修飾符 2.6. 對象嵌套 2.7. 特殊成員 引言 本篇內容主要是面向對象的進階&#xff0c;講解一些特殊的成員和方法&#xff0c;更加深入迭代器是如何通過對象實現的。 2. 面向對象進階 …

Bellman-Ford(貝爾曼福特算法)

簡介 貝爾曼-福特算法&#xff08;Bellman-Ford Algorithm&#xff09;是一種用于求解單源最短路徑問題的算法&#xff0c;它可以處理帶有負權邊的圖。 該算法的實現思路是通過不斷迭代松弛操作來更新最短路徑&#xff0c;直到找到最優解。 名詞解釋&#xff1a;1. 松弛操作&…

Qt 獲取控件尺寸與實際不一致的問題

前提&#xff1a;界面ui獲取桌面大小&#xff0c;用resize() 重新調整了界面尺寸 然后 我獲取界面上某個控件大小時&#xff0c;發現與實際尺寸不一樣。 最后發現&#xff1a; 獲取控件大小的地方&#xff0c;必須在界面show()之后才可以&#xff0c;放之前不行。 注意; 經…

WPF 控件禁用時,顯示懸浮提示

WPF 控件禁用時&#xff0c;顯示懸浮提示 控件在禁用狀態下&#xff0c;按鈕是沒有懸浮提示信息的&#xff0c;是事件觸發的機制&#xff1b; 如果要禁用下也有懸浮提示&#xff0c;可以在控件外面加一層&#xff0c;例如&#xff1a; <Border Grid.Column"1" To…

Hive【內部表、外部表、臨時表、分區表、分桶表】【總結】

目錄 Hive的物種表結構特性 一、內部表 建表 使用場景 二、外部表 建表:關鍵詞【EXTERNAL】 場景&#xff1a; 外部表與內部表可互相轉換 三、臨時表 建表 臨時表橫向對比?編輯 四、分區表 建表&#xff1a;關鍵字【PARTITIONED BY】 場景&#xff1a; 五、分桶表 …

CentOS 7.x 使用 RPM 包安裝 Gitlab

官網&#xff1a;https://about.gitlab.com/ https://about.gitlab.cn/install/ 安裝&#xff1a;https://gitlab.cn/install/ 博客&#xff1a;https://gitlab.cn/blog/ 文檔&#xff1a;https://docs.gitlab.com/ https://about.gitlab.com/install/#centos-7 https://docs.g…

工作記錄vue3 echarts地圖等 監聽瀏覽器等寫法

子組件<template><div><div>【云端報警風險】</div><div ref"target" class"w-full h-full"></div></div> </template><script setup> import { ref, onMounted,watch } from vue; import * as ech…

算能RISC-V通用云開發空間編譯pytorch @openKylin留檔

終于可以體驗下risc-v了&#xff01; 操作系統是openKylin&#xff0c;算能的云空間 嘗試編譯安裝pytorch 首先安裝git apt install git 然后下載pytorch和算能cpu的庫&#xff1a; git clone https://github.com/sophgo/cpuinfo.git git clone https://github.com/pytorc…

小米14 Ultra:未來科技的集大成者

博主貓頭虎的技術世界 &#x1f31f; 歡迎來到貓頭虎的博客 — 探索技術的無限可能&#xff01; 專欄鏈接&#xff1a; &#x1f517; 精選專欄&#xff1a; 《面試題大全》 — 面試準備的寶典&#xff01;《IDEA開發秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鴻蒙》 …

opencv圖像的本質

目的 OpenCV是一個跨平臺的庫&#xff0c;使用它我們可以開發實時的計算機視覺應用程序。 它主要集中在圖像處理&#xff0c;視頻采集和分析&#xff0c;包括人臉檢測和物體檢測等功能。 數字圖像在計算機中是以矩陣形式存儲的&#xff0c;矩陣中的每一個元素都描述一定的圖像…

VSCode React JavaScript Snippets 插件的安裝與使用指南

VSCode React JavaScript Snippets 插件的安裝與使用指南 在開發 React 項目時&#xff0c;提高效率是每個開發者都追求的目標之一。VSCode React JavaScript Snippets 插件就是為了提升 React 開發效率而設計的&#xff0c;它為常用的 React 代碼片段提供了快捷鍵&#xff0c;…