私はアダプタパターンを理解しています。 いつでも変更される可能性のあるAPIや、実装されたコードを壊す可能性があるAPIなどの第3の部分コードを扱うときに役立ちます。 例:支払いオンラインであなたのサイトのPaypalを使用しています。PayPalは支払いのためにpayMoney()メソッドを使用すると仮定します。しばらくしてから、メソッドを何かに変更してsendMoney()と言うことにします。これは、直接実装されている場合、あなたのコードを壊す可能性があるアダプターデザインパターンを使用して、これは
に第3の部分のコードに従ってください=>ペイパル
class Paypal {
public function __construct(){
// their codes
}
public function payMoney($amount){
// the logic of validating
// the $amount variables and do the payment
}
}
として解くことができるので、それを実装します直接コード内で以下のようにsendMonに時間の数字とpayMoney(からコードを更新する複雑な作業)を保存するアダプタを使用してコード
$pay = new Paypal();
$pay->payMoney(200);
を中断しますAPIスクリプトが実装されているすべての場所でey()アダプターは1つの場所で更新を有効にします。それだけです。 見てみましょう。
class paypalAdapter {
private $paypal;
// Paypal object into construct and check if it's pa
// Paypal object via type hint
public function __construct(PayPal $paypal) {
$this->paypal = $paypal;
}
// call the Paypal method in your own
//custom method that is to be
// implemented directly into your code
public function pay($amount) {
$this->paypal->payMoney($amount);
}
}
ので、それはそのようなもので、そこに行くと次のようにコードに直接PaypalAdaterを使用することができます。
// SEE THIS METHOD ABOVE TO OBSERVE CHANGES
// FROM $this->paypal->payMoney($amount);
// TO $this->paypal->senMoney($amount);
public function pay($amount) {
$this->paypal->sendMoney($amount);
}
:将来的にはそう
$pay = new PaypalAdapter(new Paypal);
$pay->pay(200);
ベンダー(ペイパル)が行われなければ何の代わりpayMoneyのsendMoneyを使用することを決定した方法有料($量)で、次のPaypalAdapterクラスを開いて行うことです
この小さな変更が1か所で行われた後は、以前と同じようにすべてがうまく機能します。
"アダプタクラスの内部から他のクラスのメソッドを呼び出す必要があります"、または他の誰かがアダプタクラスのAPIとしてこれらのメソッドを期待していますか? –
"他のクラス" = NeedClass(上記のコードでは)。 "その他のクラス"メソッドは、PublicInterfaceメソッド内で呼び出される必要があります。その場合は – MyTitle
、Nikitaの答えはあなたの選択です。それはアダプターパターンの一般的な実装です –