ホームページ  >  記事  >  バックエンド開発  >  PHP はアダプター パターンを実装します

PHP はアダプター パターンを実装します

WBOY
WBOYオリジナル
2016-06-13 13:07:10851ブラウズ

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 类
}
?>
?
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。