Goal:
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 established, which 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:
//适配目标,规定的接口将被适配对象实现 interface IDatabase { public function connect($host, $username, $password, $database); public function query($sql); } //适配器 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) { //... } } //适配器 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 = 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