PHP設計モードのアダプタモードコード例

1850 ワード

ターゲット:
1つのクラスのインタフェースを、本来互換性のないインタフェースが一緒に動作するように、顧客が望む別のインタフェースに変換することができる.一般的な理解は、異なるインタフェースを統一的なAPIインタフェースに適合させることである.
役割:
Targetはターゲットに適しており、このロールは他のクラスをどのようなインタフェースに変換するか、つまり私たちの期待インタフェースを定義します.Adapteeが適合される者は,適合されるインタフェースが必要である.Adapterアダプタは、他の2つのロールがすでに存在するロールですが、アダプタロールは、AdapteeとTargetインタフェースを適切にするために新しく確立する必要があります.
適用シーン:
データ操作にmysql、mysqli、pdo、sqlite、postgresqlなどがある場合は、生成環境でデータベースを交換する必要がある場合は、アダプタモードでインタフェースを統合できます.同じcacheのシーンでも、キャッシュポリシー(memcache、redis、apc)を交換するのが便利です.
メリット:
アダプターは、アダプターを介してアダプターターゲットのアダプターを完了し、お客様に透明な目的を達成します.
サンプルコード:

//    ,             
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);


次のようになります.
Targetアダプティブターゲット:IDataBaseインタフェースAdapteeアダプティブ:mysqlとpostgresqlのデータベース操作関数Adapterアダプタ:mysqlクラスとpostgresqlクラス