The adapter pattern is a structural design pattern and it is also a commonly used design pattern.
Adapter pattern
The adapter pattern is easy to understand. From the literal meaning, we know that it is used for adaptation. Its role is to convert the originally incompatible interface into the interface expected by the customer, so that classes that cannot work together due to incompatible interfaces can work together. To explain with an example from daily life, we know that there are many types of mobile phone charging ports, large holes and small holes for Apple and Android. Often when our phone is out of power and we borrow a charger, we find that it is not compatible with our own phone hole. Now there are adapters with chargers on the market. With the adapters, we can charge our mobile phones.
There are three roles in the adapter: target abstract class (Target), adapter (Adaptee), adapter (Adaptor)
Class adapter and object adapter
Adapters are divided into class adapters and object adapters. Let’s explain them through an example.
The following is an example of a class adapter:
class ITarget { function f1(); function f2(); function f3(); } class Adaptee { public function f1(){……}; public function f2(){……}; public function a(){……}; } // 类适配器,基于继承 class Adaptor extends Adaptee { public function f3 () { // 重新实现f3 } }
The following is an example of an object adapter
class ITarget { function f1(); function f2(); function f3(); } class Adaptee { public function a1(){……}; public function b1(){……}; public function c1(){……}; } // 对象适配器,基于组合 class Adaptor { private $adaptee = null; public function __contrust (Adaptee $adaptee) { $this->adaptee = $adaptee; …… } public function f1() { $this->adaptee->a1(); } public function f2() { // 重新实现f2 } public function f3 () { $this->adaptee->a3(); } }
How should we choose between these two implementation methods. If most of the methods in the adapter can be reused, then choose to use a class adapter, otherwise use an object adapter. Object adapters are more flexible.
Application Scenarios
The following is an introduction to the main usage scenarios of the adapter
Encapsulation is defective Interface design
Unify the interface design of multiple classes. For example, a payment system has three different payment methods, WeChat payment, Alipay payment, and online banking payment. The implementation methods are all different, so we can use the adapter pattern to let them have a unified method for external use. In this way, it is very convenient for us to call.
Interface compatible with old versions, this is often used in our system upgrades.
The above is the detailed content of What is the adapter pattern and what are its application scenarios?. For more information, please follow other related articles on the PHP Chinese website!