PHP はアダプター パターンを実装します
アダプター パターンの核となる考え方: 特定の類似クラスの操作を統一された「インターフェイス」に変換します (ここに比喩があります) - アダプター、または比喩的に言えば、それらのクラスを統合または保護する「インターフェイス」です。詳細。アダプター パターンは、アダプターと対話するコードを変更することなく、「アダプティブ」クラスを簡単に追加または削除できる「メカニズム」も構築します。これは、「コード間の結合を減らす」という設計原則に沿っています。
???次の例は、擬似コードに近い PHP 構文を使用して、データベース操作用のアダプター クラスを示しています。このアダプター クラスは、MySQL データベースと Oracle データベースを操作できますが、同じメソッドを使用します。アダプター モードを使用するため、MySQL と Oracle データベース操作クラスの違いを気にする必要はありません。
??? SQLite などのデータベース操作用のクラスを簡単に追加し、アダプターに「挿入」すると、MySQL や Oracle と同じようにすぐに SQLite データベースを操作できます。
??? //アダプタークラス:
??? // すべてのデータベースを操作するための 4 つのメソッドを定義します
<?php class Db_adapter { private $db; function __construct($db_obj) { $this->db = $db_obj; } function select_record() { $this->db->select (); } function insert_record() { $this->db->insert (); } function update_record() { $this->db->update (); } function delete_record() { $this->db->delete (); } } //MySQL 数据库操作类: class Mysql { private $obj_mysql; function __construct() { $obj_mysql = ...... ; } function select() { $obj_mysql->mysql_select (); } function insert() { $obj_mysql->mysql_insert (); } function update() { $obj_mysql->mysql_update (); } function delete() { $obj_mysql->mysql_delete (); } } //Oracle 数据库操作类: class Oracle { private $obj_oracle; function __construct() { $obj_oracle = ...... ; } function select() { $obj_oracle->oracle_select (); } function insert() { $obj_oracle->oracle_insert (); } function update() { $obj_oracle->oracle_update (); } function delete() { $obj_oracle->oracle_delete (); } } //操作 MySQL 数据库: $obj = new Db_adapter(new Mysql()) $obj->select_record (); $obj->insert_record (); $obj->update_record (); $obj->delete_record (); //操作 Oracle 数据库: $obj = new Db_adapter(new Oracle()) $obj->select_record (); $obj->insert_record (); $obj->update_record (); $obj->delete_record (); ?>
??? 要件: MySQL クラスと Oracle クラスは同じ名前と同じ数のメソッドを持ちます。各メソッドは、データベースを操作するための独自のコードを実装します。ここで変換が行われます。
??? 新しいデータベース操作を追加します。同じ名前と同じ数のメソッドを持つ新しいクラスを構築します。メソッドの内部実装は考慮されません (シールドされます) - データベースの実装が異なると異なります。
???小さな欠点: 新しいクラスでは、メソッド名が要件を満たしていないか、過失により番号が異なっている可能性があります。
??? エラーの可能性を減らすために、いくつかの改善を行うことができます。インターフェースを定義し、それをテンプレートとして継承することで標準化を図る方法です。
??? db_adapter クラスのメソッドについては、インターフェース db_driver の関数のみを使用する必要があります。
<?php //定义一个接口, interface Db_driver { function select(); function insert(); function update(); function delete(); } // 数据库操作类,比如 MySQL,Oracle 必须实现 db_driver 接口的同名方法,从而进行了规范。 class Mysql implements Db_driver { private $obj_mysql; function __construct() { $obj_mysql = ...... ; } //这里省略的代码同前边的 MySQL 类 } class Oracle implements Db_driver { private $obj_oracle; function __construct() { $obj_oracle = ...... ; } //这里省略的代码同前边的 Oracle 类 } ?>