Pythonのアダプタモードコード

Pythonのデザインパターンアダプタモード、コード、思考、など

- * -コーディング:UTF-8 - * - 
#1 著者:宝山


クラスコンピュータ:
     DEF  __init__ (自己、名):
        self.name = 

    デフ __str__ (自己):
         戻り ' {}コンピュータ' .format(自己。名)

    デフ(自己)を実行します。
         復帰は プログラムを実行


クラスのシンセサイザーを:
     デフ __init__ (自己、名):
        self.name = 名前の

    デフ __str__ (自己):
         リターン "{}シンセサイザー' .format(self.name)

    デフ(自己)を再生:
         リターンは、 ' 電子曲演奏された' 


クラス:人間の
     デフ __init__ (自己、名):
        self.name = 名前の

    デフ __str__ (自己):
         戻り値を ' {}人間' .format(self.name)

    DEF (自己)を話す:
         リターン ' 挨拶' 


クラスアダプタ:
     DEF  __init__ (自己、OBJ、adapted_methods):
        self.obj = OBJ
        自己。__dict__ .update(adapted_methods)
 DEF  __str__ (自己):
         戻りSTR(self.obj)


DEF メイン():
    オブジェクト = [コンピュータ(' のAsus ' )] 
    シンセ =シンセサイザー(' ムーグ' 
    objects.append(アダプタ(シンセ、辞書(実行 = ))synth.play)
    ヒト =ヒト(' ボブ' 
    objects.append(アダプタ(ヒト、辞書を(実行 = human.speakを)))
     のためにオブジェクト:
         印刷' {} {} ' .format(STR(I)、i.execute()))
 もし __name__ == ' __main__ ' 
    メイン()

 

コード出力:

Asusのコンピュータは、プログラムを実行
モーグ・シンセサイザーをされ、電子曲演奏
人間は挨拶ボブ

 

-------------------------------------------------- ----------------------------------------

我々はそうヒトSynthesizerおよびクライアントクラスインターフェースは、所望と互換性があり、そしてそれらのソースコードを変更せずに試みました。これは素晴らしいです!

すべてのクラスは、プロパティ名を持っている場合あなたが準備して挑戦的な運動があり、問題がある現在の実装では、次のコードは失敗します。

     I におけるオブジェクト:
         印刷' {} ' .format(i.name))

まず、立場をコーディングすることは、これは理にかなっているが、クライアントのコードのために無意味ですが、クライアントがないもの」「何をフィット」と心配するべきではないのですか?このコードは失敗する理由を考えます適応「このような詳細。私達はちょうど統一されたインタフェースを提供したいです。このコードを有効にするにはどうしますか?

アダプタクラスに含まれるオブジェクトに委ねていない部分を適応させる方法を考えます。

 

次のように答えは次のとおりです。

以下のアダプタクラスの変更は、コードの行を追加します。

クラスアダプタ:
     DEF  __init__ (自己、OBJ、adapted_methods):
        self.obj = OBJ 
        の自己。__dict__ .update(adapted_methods)
         self.name = obj.name

     DEF  __str__ (自己):
         戻り STR(self.obj)

その後、次のようにメイン関数の対応する名前を取得

DEF メイン():
    オブジェクト = [コンピュータ(' のAsus ' )] 
    シンセ =シンセサイザー(' ムーグ' 
    objects.append(アダプタ(シンセ、辞書(実行 = synth.playを))) ヒト =ヒト(' ボブ' 
    オブジェクト.append(アダプタ(ヒト、辞書(実行 = human.speakを)))
     のための I におけるオブジェクト:
         プリント' {} {} ' .format(STR(I)、i.execute()))
         プリント( '{} 」.format(i.name))

であれば __name__== ' __main__ ' 
    main()の

出力:

Asusのコンピュータは、プログラムを実行
Asusの
モーグ・シンセサイザーがされ、電子曲の演奏
ムーグ
人が挨拶ボブ
ボブ

 

 

「熟練したPythonのデザインパターン」:からリファレンス

 

おすすめ

転載: www.cnblogs.com/zhzhang/p/11287648.html