//适配器模式 可以将不同的函数接口封装成统一的api,比如mysqli和pdo interface Database{ public function connect($host, $name, $password, $db); public function query($sql); public function close(); } class MYSQLI implements Database{ protected $conn; private function connect($host, $name, $password, $db) { $this->conn = mysqli_connect($host, $name, $password, $db); } private function query($sql) { return mysqli_query($this->conn,$sql); } private function close() { mysqli_close($this->conn); } } class MYPDO implements Database{ protected $pdo; public function connect($host, $name, $password, $db){ $this->pdo = new PDO("mysql:host=$host;dbname=$db",$name,$password); } public function query($sql){ return $this->pdo->query($sql); } public function close(){ unset($this->pdo); } } //注册树模式 class Register{ protected static $objects; static function _set($alias, $obj){ self::$objects[$alias] = $obj; } static function _unset($alias){ unset(self::$objects[$alias]); } static function _get($obj){ if(isset(self::$objects[$obj])){ return self::$objects[$obj]; } } } class User{//数据库对象模式 protected $data; protected $db; public function __construct(Database $db,$id){ $this->db = new MYSQLI('127.0.0.1','admin','admin','oo'); $res = $this->db->query('select * from user where id = '.$id); $this->data = $res->fetch_assoc(); } protected function __set($key,$value){ $this->data[$key] = $value; } protected function __get($key){ $this->$key = $this->data[$key]; } public function save(){ $key = array_keys($this->data); $value = array_values($this->data); $sql = 'update user set () '.$key.' values '.$value.' where id = '.$this->id; if($this->db->query($sql)){ echo 'ok'; } } protected function __destruct(){ $this->db->close(); } } //工厂模式 class Factory{ static function createDB(){ $db = DB::getInstance();//工厂结合单例模式 Register::_set('mysql',$db); return $db; } static function getUser($id){ $key = 'user_'.$id; $user = Register::_get($key); if(!$user){ $user = new User($id); Register::_set($key, $user); } return $user; } } //使用 class Page{ public function index(){ $user = Factory::getUser(1); $user->name = 'sss'; var_dump($user); $this->test(); } public function test(){ $user = Factory::getUser(1); $user->password = '123456'; var_dump($user); $user->save(); } } //通过打印可以发现两个user对象是同一个 $page = new Page(); $page->index();
php 设计模式(注册器模式+工厂模式+数据库映射模式,单例模式+工厂模式+注册器模式混合使用)
最新推荐文章于 2023-10-07 15:39:00 发布