1. Intention
Convert the interface of a class into another interface desired by the client. The Adapter mode allows classes that were originally unable to work together due to incompatible interfaces to work together
2. Adapter pattern structure diagram
3. Main characters in adapter mode
Target role: Defines the interface used by the client related to a specific domain. This is what we expect
Source (Adaptee) role: interface that needs to be adapted
Adapter role: Adapt the Adaptee interface and the Target interface; the adapter is the core of this model. The adapter converts the source interface into the target interface. This role is a concrete class
4. Applicable Scenarios of Adapter Mode
1. You want to use an existing class, but its interface does not meet your needs
2. You want to create a reusable class that can work with other unrelated or unforeseen classes
3. You want to use an existing subclass, but it's not possible to subclass each one to match their interface. Object adapter can adapt to its parent class interface (object adapter only)
5. Class Adapter Pattern and Object Adapter
Class adapter: Adapter and Adaptee are inheritance relationships
1. Use a specific Adapter class to match the Target. The result is that when we want to match a class and all its subclasses, the class Adapter will not do the job
2. Allow Adapter to redefine some behaviors of Adaptee, because Adapter is a subset of Adaptee
3. Only introduce an object, no additional pointers are needed to indirectly obtain the adaptee
Object adapter: Adapter and Adaptee are in a delegation relationship
1. Allow one Adapter to work with multiple Adaptee at the same time. Adapter can also add functions to all Adaptees at once
2. It is difficult to redefine the behavior of Adaptee
Adapter pattern and other patterns
Bridge mode (bridge mode): The bridge mode is similar to the object adapter, but the starting point of the bridge mode is different: the purpose of the bridge mode is to separate the interface part and the implementation part, so that they can be changed relatively easily and relatively independently. The object adapter pattern means changing the interface of an existing object
Decorator mode (decorator mode): Decoration mode enhances the functionality of other objects without changing its interface. Decoration mode therefore provides better transparency to the application than adapters.
6. Class Adapter Pattern PHP Example
Class adapters use inheritance
<?php /** * 目标角色 */ interface Target { /** * 源类也有的方法1 */ public function sampleMethod1(); /** * 源类没有的方法2 */ public function sampleMethod2(); } /** * 源角色 */ class Adaptee { /** * 源类含有的方法 */ public function sampleMethod1() { echo 'Adaptee sampleMethod1 <br />'; } } /** * 类适配器角色 */ class Adapter extends Adaptee implements Target { /** * 源类中没有sampleMethod2方法,在此补充 */ public function sampleMethod2() { echo 'Adapter sampleMethod2 <br />'; } } class Client { /** * Main program. */ public static function main() { $adapter = new Adapter(); $adapter->sampleMethod1(); $adapter->sampleMethod2(); } } Client::main(); ?>
7. Object Adapter Pattern PHP Example
The object adapter uses delegation
<?php /** * 目标角色 */ interface Target { /** * 源类也有的方法1 */ public function sampleMethod1(); /** * 源类没有的方法2 */ public function sampleMethod2(); } /** * 源角色 */ class Adaptee { /** * 源类含有的方法 */ public function sampleMethod1() { echo 'Adaptee sampleMethod1 <br />'; } } /** * 类适配器角色 */ class Adapter implements Target { private $_adaptee; public function __construct(Adaptee $adaptee) { $this->_adaptee = $adaptee; } /** * 委派调用Adaptee的sampleMethod1方法 */ public function sampleMethod1() { $this->_adaptee->sampleMethod1(); } /** * 源类中没有sampleMethod2方法,在此补充 */ public function sampleMethod2() { echo 'Adapter sampleMethod2 <br />'; } } class Client { /** * Main program. */ public static function main() { $adaptee = new Adaptee(); $adapter = new Adapter($adaptee); $adapter->sampleMethod1(); $adapter->sampleMethod2(); } } Client::main(); ?>
The above is the code to implement the adapter mode using PHP. There are also some conceptual distinctions about the adapter mode. I hope it will be helpful to everyone's learning.