(十)python設計モード---アダプタモード


背景
  • 異機種コンポーネントを別のシステムに使用する場合、コードを変更せずに通信できることはめったにありません.しかし、コンポーネントコードを常に変更できるわけではありません.外部から提供されるコンポーネントであれば、コードの変更も現実的ではありません.このとき、異機種コンポーネントインタフェースと呼び出し側構造が通信できるようにする追加のコード層を作成することができます.
  • アダプタモード(Adapter pattern)構造設計モードは、互換性のないインタフェース間の互換性
  • を実現するのに役立ちます.
    原則
  • 他者インタフェースへのアクセスを要求しないソースコード
  • 開放/閉鎖の原則に違反しない
  • ≪インスタンス|Instance|emdw≫
    # -*-encoding:utf8 -*-
    
    class Module1(object):
    
        def handle1(self):
            """
            handle1
            """
            print(self.__class__.__name__, 'handle1')
    
    class Module2(object):
    
        def handle2(self):
            """
            handle1
            """
            print(self.__class__.__name__, 'handle2')
    
    class Module3(object):
    
        def handle3(self):
            """
            handle1
            """
            print(self.__class__.__name__, 'handle3')
    
    class Adapter(object):
    
        def __init__(self, obj, adapter_methods):
            self.obj = obj
            self.__dict__.update(adapter_methods)
    
    
    def run(mod_objs):
    
        for mod in mod_objs:
            mod.execute()
    
    
    if __name__ == '__main__':
        mod1 = Module1()
        ad_mod1 = Adapter(mod1, dict(execute=mod1.handle1))
        mod2 = Module2()
        ad_mod2 = Adapter(mod2, dict(execute=mod2.handle2))
        mod3 = Module3()
        ad_mod3 = Adapter(mod3, dict(execute=mod3.handle3))
        run(
            [ad_mod1, ad_mod2, ad_mod3]
        )