(十)python設計モード---アダプタモード
6554 ワード
背景異機種コンポーネントを別のシステムに使用する場合、コードを変更せずに通信できることはめったにありません.しかし、コンポーネントコードを常に変更できるわけではありません.外部から提供されるコンポーネントであれば、コードの変更も現実的ではありません.このとき、異機種コンポーネントインタフェースと呼び出し側構造が通信できるようにする追加のコード層を作成することができます. アダプタモード(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]
)