日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Python實現外觀模式、橋接模式、組合模式和享元模式

來源: 責編: 時間:2024-04-12 17:33:30 189觀看
導讀今天介紹四種結構型設計模式:外觀模式、橋接模式、組合模式和享元模式。外觀模式外觀模式(Facade Pattern),它為子系統提供一個統一的接口,使得子系統更加容易使用。在Python中,我們可以通過定義一個外觀類來實現外觀模式。

今天介紹四種結構型設計模式:外觀模式、橋接模式、組合模式和享元模式。xHo28資訊網——每日最新資訊28at.com

xHo28資訊網——每日最新資訊28at.com

外觀模式

外觀模式(Facade Pattern),它為子系統提供一個統一的接口,使得子系統更加容易使用。xHo28資訊網——每日最新資訊28at.com

在Python中,我們可以通過定義一個外觀類來實現外觀模式。這個外觀類包含了一組子系統的接口,并提供了一個簡單的接口供客戶端使用。xHo28資訊網——每日最新資訊28at.com

下面是一個簡單的例子:xHo28資訊網——每日最新資訊28at.com

class Subsystem1:    def method1(self):        print("Subsystem1 method1")class Subsystem2:    def method2(self):        print("Subsystem2 method2")class Facade:    def __init__(self):        self.subsystem1 = Subsystem1()        self.subsystem2 = Subsystem2()    def operation(self):        self.subsystem1.method1()        self.subsystem2.method2()if __name__ == "__main__":    facade = Facade()    facade.operation()

在這個例子中,Subsystem1和Subsystem2是兩個子系統,它們分別實現了自己的一組接口。Facade是一個外觀類,它包含了Subsystem1和Subsystem2的接口,并提供了一個簡單的operation接口供客戶端使用。xHo28資訊網——每日最新資訊28at.com

舉例說明:xHo28資訊網——每日最新資訊28at.com

假設我們有一個電子商務網站,它包含了一組子系統:商品管理、訂單管理、用戶管理等。我們可以通過定義一個外觀類,將這些子系統的接口封裝起來,提供一個簡單的接口供客戶端使用。xHo28資訊網——每日最新資訊28at.com

class ProductManager:    def add_product(self, product):        print("Add product:", product)class OrderManager:    def add_order(self, order):        print("Add order:", order)class UserManager:    def add_user(self, user):        print("Add user:", user)class ECommerceFacade:    def __init__(self):        self.product_manager = ProductManager()        self.order_manager = OrderManager()        self.user_manager = UserManager()    def add_product(self, product):        self.product_manager.add_product(product)    def add_order(self, order):        self.order_manager.add_order(order)    def add_user(self, user):        self.user_manager.add_user(user)if __name__ == "__main__":    facade = ECommerceFacade()    facade.add_product("iPhone")    facade.add_order("Order001")    facade.add_user("User001")

在這個例子中,ProductManager、OrderManager、UserManager是三個子系統,它們分別實現了自己的一組接口。ECommerceFacade是一個外觀類,它包含了這三個子系統的接口,并提供了一個簡單的add_product、add_order、add_user接口供客戶端使用。xHo28資訊網——每日最新資訊28at.com

客戶端只需要調用ECommerceFacade提供的接口,就可以完成商品、訂單、用戶的添加操作,而不需要了解具體的子系統實現。這樣就大大簡化了客戶端的代碼。xHo28資訊網——每日最新資訊28at.com

橋接模式

橋接模式(Bridge Pattern),它將抽象部分和實現部分分離開來,使得它們可以獨立地變化。在Python中,我們可以通過定義一個抽象類和一個實現類來實現橋接模式。xHo28資訊網——每日最新資訊28at.com

from abc import ABC, abstractmethodclass Abstraction(ABC):    def __init__(self, implementation):        self.implementation = implementation    @abstractmethod    def operation(self):        passclass Implementation:    def operation_impl(self):        passclass ConcreteAbstraction(Abstraction):    def operation(self):        self.implementation.operation_impl()

在上面的代碼中,我們定義了一個抽象類Abstraction和一個實現類Implementation。在Abstraction類中,我們定義了一個抽象方法operation,在ConcreteAbstraction類中,我們實現了operation方法,調用了實現類的方法。這樣,我們就將抽象部分和實現部分分離開來了。xHo28資訊網——每日最新資訊28at.com

組合模式

組合模式(Composite Pattern),它允許我們將對象組合成樹形結構來表示“部分-整體”的層次結構。在Python中,我們可以通過定義一個抽象類和一個組合類來實現組合模式。xHo28資訊網——每日最新資訊28at.com

from abc import ABC, abstractmethodclass Component(ABC):    @abstractmethod    def operation(self):        passclass Composite(Component):    def __init__(self):        self.children = []    def add(self, component):        self.children.append(component)    def remove(self, component):        self.children.remove(component)    def operation(self):        for child in self.children:            child.operation()

在上面的代碼中,我們定義了一個抽象類Component和一個組合類Composite。在Composite類中,我們定義了一個children列表,用來存儲子組件。在add和remove方法中,我們可以添加和刪除子組件。在operation方法中,我們遍歷子組件,調用其operation方法。xHo28資訊網——每日最新資訊28at.com

享元模式

享元模式(Flyweight Pattern),它通過共享對象來減少內存的使用。在Python中,我們可以通過定義一個享元工廠類和一個享元類來實現享元模式。xHo28資訊網——每日最新資訊28at.com

class Flyweight:    def __init__(self, state):        self.state = state    def operation(self, extrinsic_state):        passclass FlyweightFactory:    def __init__(self):        self.flyweights = {}    def get_flyweight(self, state):        if state not in self.flyweights:            self.flyweights[state] = Flyweight(state)        return self.flyweights[state]

在上面的代碼中,我們定義了一個享元類Flyweight和一個享元工廠類FlyweightFactory。在Flyweight類中,我們定義了一個state屬性,表示享元的內部狀態,在operation方法中,我們可以傳入一個外部狀態extrinsic_state,用來改變享元的行為。在FlyweightFactory類中,我們維護了一個flyweights字典,用來存儲已經創建的享元對象。在get_flyweight方法中,我們根據傳入的狀態state,返回一個已經創建的享元對象或者新創建一個享元對象。這樣,我們就可以通過共享對象來減少內存的使用了。xHo28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-83281-0.htmlPython實現外觀模式、橋接模式、組合模式和享元模式

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: C# 中優雅的動態序列化接口返回數據

下一篇: Facebook 為 React 寫了一種語言,看完直呼 “秀” 啊!

標簽:
  • 熱門焦點
  • 2023 年的 Node.js 生態系統

    隨著技術的不斷演進和創新,Node.js 在 2023 年達到了一個新的高度。Node.js 擁有一個龐大的生態系統,可以幫助開發人員更快地實現復雜的應用。本文就來看看 Node.js 最新的生
  • SpringBoot中使用Cache提升接口性能詳解

    環境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架從 3.1 開始,對 Spring 應用程序提供了透明式添加緩存的支持。和事務支持一樣,抽象緩存允許一致地使用各
  • 企業采用CRM系統的11個好處

    客戶關系管理(CRM)軟件可以為企業提供很多的好處,從客戶保留到提高生產力。  CRM軟件用于企業收集客戶互動,以改善客戶體驗和滿意度。  CRM軟件市場規模如今超過580
  • 微信語音大揭秘:為什么禁止轉發?

    大家好,我是你們的小米。今天,我要和大家聊一個有趣的話題:為什么微信語音不可以轉發?這是一個我們經常在日常使用中遇到的問題,也是一個讓很多人好奇的問題。讓我們一起來揭開這
  • 三萬字盤點 Spring 九大核心基礎功能

    大家好,我是三友~~今天來跟大家聊一聊Spring的9大核心基礎功能。話不多說,先上目錄:圖片友情提示,本文過長,建議收藏,嘿嘿嘿!一、資源管理資源管理是Spring的一個核心的基礎功能,不
  • 19個 JavaScript 單行代碼技巧,讓你看起來像個專業人士

    今天這篇文章跟大家分享18個JS單行代碼,你只需花幾分鐘時間,即可幫助您了解一些您可能不知道的 JS 知識,如果您已經知道了,就當作復習一下,古人云,溫故而知新嘛。現在,我們就開始今
  • AMD的AI芯片轉單給三星可能性不大 與臺積電已合作至2nm制程

    據 DIGITIMES 消息,英偉達 AI GPU 出貨逐季飆升,接下來 AMD MI 300 系列將在第 4 季底量產。而半導體業內人士表示,近日傳出 AMD 的 AI 芯片將轉單給
  • 華為舉行春季智慧辦公新品發布會 首次推出電子墨水屏平板

    北京時間2月27日晚,華為在巴塞羅那舉行春季智慧辦公新品發布會,在海外市場推出之前已經在中國市場上市的筆記本、平板、激光打印機等辦公產品,并首次推出搭載
  • 外交部:美方應停止在網絡安全問題上不負責任地指責他國

      中國外交部今天(16日)舉行例行記者會。會上,有記者問,美國情報官員稱,他們正在阻攔來自中國以及其他國家的黑客獲取相關科研成果。 中方對此有何評論?對此
Top 主站蜘蛛池模板: 安岳县| 惠来县| 秦皇岛市| 崇仁县| 新巴尔虎左旗| 泰来县| 淮安市| 衡东县| 常宁市| 九龙县| 鹤壁市| 洪泽县| 莫力| 连州市| 邢台县| 阿拉尔市| 新泰市| 龙陵县| 莱州市| 高台县| 乌拉特中旗| 长治县| 进贤县| 永寿县| 射阳县| 行唐县| 河南省| 海安县| 安图县| 图木舒克市| 泰兴市| 军事| 鄂伦春自治旗| 拜城县| 调兵山市| 昌乐县| 宕昌县| 临潭县| 卢湾区| 永吉县| 开封市|