Python ブリッジ モードの導入と使用

1. Python ブリッジ モードの概要

コンセプト:

        Python ブリッジ パターン (ブリッジ パターン) は、抽象部分を実装部分から分離して、独立して変更できるようにするために使用されるソフトウェア設計パターンです。

        ブリッジ インターフェイスを使用してブリッジ オブジェクトを作成することで、抽象化と実装を接続することができます。

関数:

         ブリッジ パターンの主な機能は、抽象部分と実装部分を分離して、独立して変更できるようにすることです。

        実装部分が変更されても、抽象部分は影響を受けませんし、その逆も同様です。これにより、システムの柔軟性と拡張性が向上します。

アドバンテージ:

         1. 抽象部分と実装部分の分離により、システムの拡張と保守が容易になります。

        2. コードの再利用性とスケーラビリティを向上させます。

        3. 複数のプラットフォームで実行する必要があるプログラムの場合、ブリッジ モードによりコードの重複を回避できます。

欠点:

        1. システムの複雑さが増し、より多くのクラスとインターフェイスを設計する必要がある。

         2. ブリッジ モードでは抽象クラスとインターフェイスを使用する必要があるため、コードが複雑になります。

アプリケーションシナリオ:

        1. クラスの機能を拡張する必要がある場合は、元のクラスの変更を避けるためにブリッジ モードを使用します。

        2. クラスに複数の実装がある場合、複数の実装間の切り替えを避けるためにブリッジ モードを使用します。

        3. 複数のプラットフォームで実行するプログラムが必要な場合は、重複したコードの記述を避けるためにブリッジ モードを使用します。

使い方:

        ブリッジ パターンは、抽象クラスとインターフェイスを使用して抽象部分と実装部分を分離することによって実装されます。

        抽象部分は抽象クラスまたは抽象インターフェイスによって定義され、実装部分は具体的な実装クラスによって継承されます。

        ブリッジング インターフェイスは抽象部分と実装部分を接続し、それらが独立して変化できるようにします。

アプリケーション開発におけるアプリケーション:

        Python ブリッジ パターンは、アプリケーション開発でよく使用されます。

        たとえば、大規模なソフトウェア システムでは、多くの機能を拡張および変更する必要がありますが、ブリッジ モードを使用すると、元のコードの変更を回避できます。

        さらに、複数のプラットフォームで実行する必要があるプログラムでは、ブリッジ モードにより重複コードの作成が回避され、コードの再利用性とスケーラビリティが向上します。

2、使用する

動作原理:

        ブリッジ パターンは、抽象部分を実装部分から分離して、それらが独立して変更できるようにすることで機能します。

        実装部分が変更されても、抽象部分は影響を受けませんし、その逆も同様です。

        これにより、システムの柔軟性と拡張性が向上します。

        具体的な実装方法としては、抽象クラスとインタフェースを使って抽象部分と実装部分を分離し、ブリッジインタフェースを使って抽象部分と実装部分を接続します。

例:

コンピューター ブランドの販売システムを開発しているとします。システムをより柔軟でスケーラブルにするために、コンピューター ブランドをオペレーティング システムから分離する必要があるとします。現時点では、Python ブリッジ モードを使用して実現できます。

1. まず、抽象クラス Computer のインターフェイス OperatingSystem とオペレーティング システムを定義します。

2. 特定のコンピュータ ブランドとオペレーティング システムを認識します。

3. 最後に、ブリッジ インターフェイスを使用して、抽象部分と実装部分を接続します。



# abc模块提供了一个称为ABC的类和一个称为abstractmethod的装饰器,用于抽象基类(Abstract Base Classes)
from abc import ABC, abstractmethod

class Computer(ABC):
    @abstractmethod # @abstractmethod是Python装饰器语法中的一种,用于定义抽象方法。抽象方法是一种在抽象基类中声明但不实现的方法。其他非抽象子类必须实现这些方法来满足抽象基类的规范。
    def run(self):
        pass

class OperationSystem(ABC):
    @abstractmethod
    def install(self):
        pass


class Linux(OperationSystem):
    def install(self):
        print("install Linux operation system")

class Dell(Computer): # 继承抽象类Computer
    def __init__(self, os):
        self._os = os

    def run(self): # 实现抽象类中声明的run方法
        print("run Dell Computer")
        self._os.install()

class Lenovo(Computer):
    def __init__(self, os):
        self._os = os

    def run(self):
        print("run Lenovo")
        self._os.install()

class Windows(OperationSystem):
    def install(self):
        print("install Windows operation system")

class Linux(OperationSystem):
    def install(self):
        print("install Linux operation system")

# 使用桥接接口将抽象和实现部分连接起来
os = Windows()
dell = Dell(os)
dell.run()

os = Linux()
lenovo = Lenovo(os)
lenovo.run()

このようにして、コンピュータのブランドとオペレーティング システムを分離することができ、ブリッジ モードが実現され、システムの柔軟性と拡張性が向上します。新しいコンピューター ブランドまたはオペレーティング システムを追加する必要がある場合は、元のコードを変更せずに抽象クラスとインターフェイスを実装するだけで済みます。

        操作結果:

Dell コンピュータを実行
Windows オペレーティング システムをインストール
Lenovo を
実行 Linux オペレーティング システムをインストール

3. その他

from abc import ABC、abstractmethod 説明

Python では、abcモジュールは、抽象基本クラス (Abstract Base Classes) と呼ばれるABCクラスとabstractmethodデコレーターを提供します。抽象基本クラスは、インターフェイスと仕様を定義する特別なクラスであり、インスタンス化できません。

ABCすべての抽象基本クラスの基本クラスですが、それ自体は抽象クラスではありません。通常のクラスはクラスを継承することで抽象クラスにすることができますABCabstractmethodデコレータは、サブクラスによって実装される必要がある抽象メソッドを定義するために使用されます。抽象メソッドを実装せずにサブクラスをインスタンス化することはできません。

ABC多態性と正規化は、と を使用してabstractmethod実現できます。インターフェイスと仕様は抽象基本クラスで定義され、コードを記述するときにインターフェイスに基づいてプログラミングできるため、コードの結合が減少し、コードの再利用性と保守性が向上します。

 @abstractメソッドの説明

@abstractmethod抽象メソッドを定義するために使用される Python デコレータ構文の 1 つです。抽象メソッドは、抽象基本クラスで宣言されているが実装されていないメソッドです。他の非抽象サブクラスは、抽象基本クラスの仕様を満たすためにこれらのメソッドを実装する必要があります。

@abstractmethodデコレータを使用する場合は、抽象基本クラスでメソッドを定義し、そのメソッドでデコレータを使用する必要があります。具体的な構文は次のとおりです。

from abc import ABC, abstractmethod

class MyAbstractClass(ABC):
    @abstractmethod
    def my_abstract_method(self):
        pass

上記のコードでは、MyAbstractClassこれは抽象メソッドを含む抽象基本クラスですmy_abstract_methodこのメソッドをデコレータで装飾すること@abstractmethodは、それが抽象メソッドであり、そのサブクラスによって実装される必要があることを示します。抽象メソッドでは、通常、特定の関数は実装されず、サブクラスが実装するためのフレームワークまたはインターフェイスのみが提供されます。

抽象メソッドは、非抽象基本クラスで実装することも、非抽象基本クラスで再度抽象宣言することもできます。サブクラスは、抽象基本クラスで宣言されたすべての抽象メソッドを実装していない場合にも抽象になります。

おすすめ

転載: blog.csdn.net/songpeiying/article/details/131916227