设计模式--适配器模式

2021-05-02

可以将截然不同的函数接口封装成统一的API

以下为伪代码,可以通过接口约束实现多种类型的数据库以相同的接口实现连接、查询、关闭,调用/切换时更加简单,三个私有方法用于实现单例获取对象

<?php
interface Database
{
	public function connect($host, $port, $user, $password, $dbname);
	public function query($sql);
	public function close();
}

class Db1 implements Database
{
	private $_conn;
	private static $_instance;
    
	private function __construct()
	{
	}

	private function __clone()
	{
	}

	public static function getInstance()
	{
		if (self::$_instance) {
			self::$_instance = new self;
		}
		retuen self::$_instance;
	}
	public function connect($host, $port, $user, $password, $dbname)
	{
		$this->_conn = new PDO("mysql:host=$host;port=$port;dbname=$dbname", $user, $password);
		return $this->_conn;
	}
	public function query($sql)
	{
		return $this->_conn->query($sql);
	}
	public function close()
	{
		unset($this->_conn);
	}
}

class Db2 implements Database
{
	private $_conn;
	private static $_instance;

	private function __construct()
	{
	}

	private function __clone()
	{
	}

	public static function getInstance()
	{
		if (self::$_instance) {
			self::$_instance = new self;
		}
		retuen self::$_instance;
	}
	public function connect($host, $port, $user, $password, $dbname)
	{
		$this->_conn = new PDO("mysql:host=$host;port=$port;dbname=$dbname", $user, $password);
		return $this->_conn;
	}
	public function query($sql)
	{
		return $this->_conn->query($sql);
	}
	public function close()
	{
		unset($this->_conn);
	}
}

 

{/if}