python基礎設計模式之橋接模式

橋接模式 :屬於結構型模式的一種,通過將抽象部分與實現部分分離,使得其可以按照自己獨立的方式運行
抽象化 :通俗點說,就是將具有共同特徵包括屬性以及行爲的部分抽象出來當作一個實體進行對待
實現化 :可以類比爲面向對象思想中對類的實例化,實現化就是對抽象化的具體實現
脫耦合 :脫耦是指將抽象化和實現化之間的耦合解脫開,或者說是將它們之間的強關聯改換成弱關聯

橋接模式的角色
抽象化角色

抽象化給出的定義,並保存一個對實現化對象的引用

擴展抽象化

擴展抽象化角色,改變和修正父類對抽象化的定義

實現化角色

這個角色給出實現化角色的接口,但不給出具體的實現必須指出的是,這個接口不一定和抽象化角色的接口定義相同,實際上,這兩個接口可以非常不一樣。實現化角色應當只給出底層操作,而抽象化角色應當只給出基於底層操作的更高一層的操作

具體實現化角色

這個角色給出實現化角色接口的具體實現

橋接模式的具體實例解析

實現一個跨平臺的圖片展示器,該展示器支持在不同的操作系統平臺(Windows,Linux,Unix)中展示不同格式的圖片(JPEG,TIF,GIF)

實例具體實現

利用橋接模式的思想,對於不同的操作系統平臺以及不同的圖片格式,可以將其抽象化具有展示功能的高度抽象方法,通過抽象的接口建立兩個抽象化方法之間的聯繫。

實例UML類圖

在這裏插入圖片描述

橋接模式的代碼模擬實現
# -*- coding: utf-8 -*-
# @Time    : 2020/4/17 16:40
# @File    : __init__.py.py
# @Software: PyCharm Community Edition

#python實現橋接模式
from abc import ABCMeta,abstractmethod
class AbstractOperationSys(metaclass=ABCMeta) :  #抽象操作系統

    @abstractmethod
    def player(self):
        pass

class WindowsOpertionSystem(AbstractOperationSys) : #具體的操作系統

    def player(self,fileName):
        pass
class linuxOperationSystem(AbstractOperationSys) :

    def player(self,fileName):
        pass
class UnixOperationSystem(AbstractOperationSys) :

    def player(self,fileName):
        pass


class AbstractFormatInterface(metaclass=ABCMeta) :  #抽象接口

    def __int__(self):
        self.osType = None

    def setting(self,osType):
        self.osType = osType

    @abstractmethod
    def player(self,):
        pass


class JPEG(AbstractFormatInterface) :

    def player(self,fileName):
        self.osType.player(fileName)

class TIF(AbstractFormatInterface) :

    def player(self,fileName):
        self.osType.player(fileName)

class GIF(AbstractFormatInterface) :

    def player(self,fileName):
        self.osType.player(fileName)

橋接模式的優缺點
優點

1 離抽象接口及其實現部分。提高了比繼承更好的解決方案。
2 橋接模式提高了系統的可擴充性,在兩個變化維度中任意擴展一個維度,都不需要修改原有系統。
3 實現細節對客戶透明,可以對用戶隱藏實現細節。

缺點

1 橋接模式的引入會增加系統的理解與設計難度,由於聚合關聯關係建立在抽象層,要求開發者針對抽象進行設計與編程。
2 橋接模式要求正確識別出系統中兩個獨立變化的維度,因此其使用範圍具有一定的侷限性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章