ソフトウェア開発は、新しいアイデア、方法、高品質のライブラリとフレームワークとともに常に進化します。 ただし、変更は避けられません。 一見完璧なシステムでさえ、最終的には修正要求に直面します。 開発者として、これらの変更を予測し、対応する必要があります。アダプターパターンは、このような変更を管理するための重要な設計パターンです。この記事では、実際の例を通じてその用途と利点を説明します。
キーテイクアウト:
さて、携帯電話にインターネットにアクセスできないエリアにいることを想像してください。どのようにメールを送信しますか?携帯電話を電子メールアプリケーションに接続するためのアダプターが必要です。 このアダプターは次のとおりです
電話と電子メールアプリの間にインターネット接続を有効にします。
電子メールアプリのAPIにアクセスして、電子メールを送信します。
IFTTTはこのアダプターとして機能する可能性があります。 人気のあるAPIを使用してタスクを自動化します
アダプターパターンの実装の理解例として、ウェブサイトの電子メールサブスクリプションインターフェイスを使用しましょう。
<?php interface EmailSubscribe { public function subscribe($email); public function unsubscribe($email); public function sendUpdates(); } ?>
開発者と電子メールサービスプロバイダーは、Feedburner、MailChimpなどのサービスにこれを実装できます。Feedburnerの例は次のとおりです。
<?php class FeedburnerEmail implements EmailSubscribe { public function subscribe($email) { } public function unsubscribe($email) { } public function sendUpdates() { // Get Available Subscribers // Get Website Updates // Send Emails } } $feedburner_email = new FeedburnerEmail(); $feedburner_email->sendUpdates(); ?>
新しいバージョンは
<?php class FeedburnerEmailVersion2 { public function subscribe($email) { } public function unsubscribe($email) { } public function getSubscribers() { // Return Subscribers } public function sendEmails($subscribers) { // Get Website Updates // Send Emails echo "emails sent today"; } } $feedburner_email = new FeedburnerEmailVersion2(); $subscribers = $feedburner_email->getSubscribers(); $feedburner_email->sendEmails($subscribers); ?>
EmailSubscribe
<?php class FeedburnerAdapter implements EmailSubscribe { public function subscribe($email) { } public function unsubscribe($email) { } public function sendUpdates() { $feedburner = new FeedburnerEmailVersion2(); $subscribers = $feedburner->getSubscribers(); $feedburner->sendEmails($subscribers); } } $feedburner_email = new FeedburnerAdapter(); $feedburner_email->sendUpdates(); ?>
を初期化し、元の機能を再構築します。 アプリケーションは、ライブラリの変更に気付いておらず、アダプターとのみ相互作用します。
FeedburnerAdapter
FeedburnerEmailVersion2
通常、クライアント、ターゲット、および適応者がいます。 アダプターは、互換性を維持するために、ターゲットと適応者の間にあります。 インターフェイスはPHPで広く使用されていませんが、原則は同じままです。互換性のないコンポーネントを橋渡しします。
アダプターの作成はプロジェクトに依存します。 一般的なサードパーティライブラリの場合、開発者は通常、アダプターを作成します。 大規模なプロジェクトでは、ベンダーは、更新後に互換性を維持するためにライブラリにアダプターを提供する場合があります。 アダプターパターン - 間違った方法<
アダプターパターンは、設計が不十分なシステムを修正するためではありません。 どちらもと
の互換性のない実装を備えたシナリオを考えてみましょう。 これには、クライアントクラスの非互換性を修正するためのアダプターが必要であり、インターフェイス定義で対処すべき設計上の欠陥を強調しています。アダプターパターン - 正しい方法
アダプターは、サードパーティライブラリで使用するのが最適です。または、元の要件とは大きく異なる新しい機能を追加する場合です。 たとえば、TwitterのサブスクリプションをWebサイトに追加します。 FeedburnerEmail
クラスは、既存のMailchimpEmail
インターフェイスと互換性がありませんが、適応できます。
EmailSubscribe
インターフェイスに適応し、クライアントが変更されないようにします。
概要TwitterService
EmailSubscribe
アダプターパターンは強力なツールですが、その効果的な使用には慎重に検討する必要があります。 その適切で不適切なアプリケーションを理解することは、クリーンで保守可能なコードにとって重要です。
<?php class TwitterService { public function authenticate($username) {} public function deauthenticate($username) {} public function tweet($message,$user) { // Update wall with new tweet } public function getUpdates() { // Return Updates } public function getFollowers() { // Return followers } } class TwitterAdapter implements EmailSubscribe { public function subscribe($username) { } public function unsubscribe($username) { } public function sendUpdates() { $tw_service = new TwitterService(); $updates = $tw_service->getUpdates(); $subscribers = $tw_service->getFollowers(); $tw_service->tweet($updates,$subscribers); } } $twitter_subscribe = new TwitterAdapter(); $twitter_subscribe->sendUpdates(); ?>
以上がPHPマスター|アダプターパターンの実用的な側面の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。