This article mainly introduces the adapter pattern code examples of PHP design patterns. This article explains the goals, roles, application scenarios, advantages, etc. Content, and give code examples, friends in need can refer to it
Target:
The interface of a class can be converted into another interface that the customer wants, so that originally incompatible interfaces can work together. The popular understanding is to adapt different interfaces into a unified API interface.
Character:
Target adaptation target, this role defines what interface to convert other classes to, which is our expected interface.
Adaptee is the interface that needs to be adapted.
Adapter adapter, the other two roles are existing roles, and the adapter role needs to be newly created. It is used to adapt the Adaptee and Target interfaces.
Application scenarios:
If data operations include mysql, mysqli, pdo, sqlite, postgresql, etc., if the generation environment needs to change the database, the adapter mode can be used to unify the interface. The same applies to the cache scenario. This will make it more convenient to change the cache strategy (memcache, redis, apc).
Advantages:
The adapted person completes the adaptation of the adaptation target through the adapter to achieve the purpose of being transparent to customers.
Sample code:
?
|
//Adaptation target, the specified interface will be implemented by the adaptation object interface IDatabase { public function connect($host, $username, $password, $database); public function query($sql); } //Adapter class Mysql implements IDatabase { protected $connect; public function connect($host, $username, $password, $database) { $connect = mysql_connect($host, $username, $password); mysql_select_db($database, $connect); $this->connect = $connect; //... } public function query($sql) { //... } } //Adapter class Postgresql implements IDatabase { protected $connect; public function connect($host, $username, $password, $database) { $this->connect = pg_connect("host=$host dbname=$database user=$username password=$password"); //... } public function query($sql) { //... } } //Client use $client = new Postgresql(); $client->query($sql); |
As above:
Target adaptation target: IDataBase interface
Adaptee is adapted: database operation functions of mysql and postgresql
Adapter adapter: mysql class and postgresql class