pythonアダプター設計モードを実現する最も簡単な例


アダプターの設計モードはいくつかのコードを変えるのがおっくうで、あるいはいくつかのインターフェースが変えにくい時、1つの特定のパッケージを使って、いくつかの特定の編纂方法、異なったインターフェースに同じ種類の呼び出し方式を使って使うことができます。
もっと簡単に話すと、例えばいくつかの異なるインターフェースaliyun、qiniuyun、tencentyunは新規インターフェースであり、以前はインタフェースyunを使ってファイルのバックアップを行っていましたが、今はそれぞれの呼び出しが煩雑で、yunを使ってaliyun、qiniuyun、tencentyunを使ってファイルをアップロードします。この時はアダプターを書く必要があります。
今は簡単な例を見ます。Uploadはアップロードクラスです。中にはyun方法があります。

class Upload:
  def yun(self):
    return '...... Uploading '
その後、3つのアップロードクラスが追加されました。それぞれAliUpload、QiniuUpload、TencentUploadです。以下のコードです。

class AliUpload:
  def aliyun(self):
    return '......aliyun Uploading '


class QiniuUpload:
  def qiniuyun(self):
    return '......qiniuyun Uploading ' 
    
class TencentUpload:
  def tencentyun(self):
    return '......tencentyun Uploading ' 
今はそれらの中のyun方法を全部使って統一インターフェースの名前をupoloadyunにしたいです。アダプターを作成する必要があります。コードは以下の通りです。

class Adapter:
  def __init__(self,yun,func):
    self.yun=yun
    self.__dict__.update(func)
init方法は2つのパラメータを受信します。一つはyun、yunはyunオブジェクト、つまりAliUpload、QiniuUpload、TencntUpload及びUploadのオブジェクト、もう一つはfuncです。同じ名前の方法辞書が必要です。コールは以下の通りです。
まずyunのオブジェクトを新規作成します。

yun_obj=Upload()
aliyun_obj=AliUpload()
qiniuyun_obj=QiniuUpload()
tencentyun_obj=TencentUpload()
次にアダプタオブジェクトを新規に作成し、上記のオブジェクトおよび方法をアダプタ初期化方法に導入する。

aptyun=Adapter(yun_obj,dict(uploadyun=yun_obj.yun))
aptali=Adapter(aliyun_obj,dict(uploadyun=aliyun_obj.aliyun))
aptqiniu=Adapter(qiniuyun_obj,dict(uploadyun=qiniuyun_obj.qiniuyun))
apttencent=Adapter(tencentyun_obj,dict(uploadyun=tencentyun_obj.tencentyun))
私たちはuplloadyunメソッド名を使って一括して呼び出す必要がありますので、キーはuploadyunとなり、その後はクラスメンバー変数となります。最後に直接アダプターオブジェクトで統一名称の方法で呼び出します。

print(aptyun.uploadyun())
print(aptali.uploadyun())
print(aptqiniu.uploadyun())
print(apttencent.uploadyun())
結果は以下の通りです

名前を統一したらもう一度パッケージして、一括して呼び出すことができます。
全体コードは以下の通りです。

class Upload:
  def yun(self):
    return '...... Uploading '

class AliUpload:
  def aliyun(self):
    return '......aliyun Uploading '


class QiniuUpload:
  def qiniuyun(self):
    return '......qiniuyun Uploading ' 
    
class TencentUpload:
  def tencentyun(self):
    return '......tencentyun Uploading ' 
    
class Adapter:
  def __init__(self,yun,func):
    self.yun=yun
    self.__dict__.update(func)

#   
yun_obj=Upload()
aliyun_obj=AliUpload()
qiniuyun_obj=QiniuUpload()
tencentyun_obj=TencentUpload()
#    
aptyun=Adapter(yun_obj,dict(uploadyun=yun_obj.yun))
aptali=Adapter(aliyun_obj,dict(uploadyun=aliyun_obj.aliyun))
aptqiniu=Adapter(qiniuyun_obj,dict(uploadyun=qiniuyun_obj.qiniuyun))
apttencent=Adapter(tencentyun_obj,dict(uploadyun=tencentyun_obj.tencentyun))
#        
print(aptyun.uploadyun())
print(aptali.uploadyun())
print(aptqiniu.uploadyun())
print(apttencent.uploadyun())
ここでは、pythonの最も簡単なアダプター設計モードの例についての記事を紹介します。これに関連して、pythonアダプターの設計モードの内容は以前の文章を検索したり、以下の関連記事を見たりしてください。これからもよろしくお願いします。