Reply to comment

  • warning: array_fill(): Number of elements must be positive in /var/www/vhosts/benjaminradtke.com/httpdocs/includes/database.inc on line 253.
  • warning: implode(): Invalid arguments passed in /var/www/vhosts/benjaminradtke.com/httpdocs/includes/database.inc on line 253.
  • warning: array_keys() expects parameter 1 to be array, null given in /var/www/vhosts/benjaminradtke.com/httpdocs/modules/user/user.module on line 528.
  • user warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 query: SELECT p.perm FROM role r INNER JOIN permission p ON p.rid = r.rid WHERE r.rid IN () in /var/www/vhosts/benjaminradtke.com/httpdocs/modules/user/user.module on line 528.

Adapter Pattern

Your rating: None Average: 5 (1 vote)

Ein Adapter im mechanischen Sinn dient der Verbindung zweier verschiedener Geräte. Diese Eigenschaft lässt sich auf Schnittstellen in der Programmierung ebenfalls anwenden. Das Adapter Pattern passt die API (Schnittstelle) einer gegebenen Klasse an die davon abweichende Erwartungen einer Implementierung an. Vorkommen könnte dies zum Beispiel beim Aufeinandertreffen zweier Bibliotheken von verschiedenen Autoren.

Ein Beispiel:

DispatcherInterface

Die konkrete Implementierung stellt für einen Dispatcher folgendes Interface zur Verfügung.

  1. interface DispatcherInterface {
  2.  
  3. public function init();
  4.  
  5. public function run();
  6. }

Dispatcher

Folgender Dispatcher wird bereit gestellt. Leider bietet dieser nicht die gewünschten Methoden und implementiert auch nicht das gegebene Interface.

  1. class Dispatcher {
  2.  
  3. public function prepare() {
  4.  
  5. }
  6.  
  7. public function preProcess() {
  8.  
  9. }
  10.  
  11. public function postProcess() {
  12.  
  13. }
  14.  
  15. public function execute() {
  16.  
  17. }
  18. }

DispatcherAdapter

Aus jetzt nicht weiter erläuterbaren Gründen ;-) besteht keine Möglichkeit Implementierung oder Dispatcher anzupassen. Dadurch kommt der (Dispatcher-)Adapter zum Einsatz, um Abhilfe zu schaffen.

  1. class DispatcherAdapter implements DispatcherInterface {
  2.  
  3. private $_dispatcher;
  4.  
  5. public function __contruct(Dispatcher $dispatcher) {
  6. $this->_dispatcher = $dispatcher;
  7. }
  8.  
  9. public function init() {
  10. $this->_dispatcher->prepare();
  11. }
  12.  
  13. public function run() {
  14. $this->_dispatcher->preProcess();
  15. $this->_dispatcher->execute();
  16. $this->_dispatcher->postProcess();
  17. }
  18. }

Der Adapter implementiert das gegebene Interface und mapped die Methoden auf die des konkreten Dispatchers. Dadurch werden Methoden "umbennannt" oder zusammengefasst und somit die notwendige API geschaffen.

Reply

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <abbr>
  • Lines and paragraphs break automatically.

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image.

Tags