1 <?php 2 Class Demo{ 3 //用于保存当前类的实例 4 private static $instance; 5 //构造函数私有化,防止直接new当前对象 6 private function __construct(){} 7 //析构函数私有化,防止从外部直接复制当前对象 8 private function __clone(){} 9 //getInstance公有函数用于获取当前类的实例 10 public static function getInstance() 11 { 12 //判断当前类成员变量instance是否为空 13 //如果不为空,则直接返回类的实例 14 //如果为空,则new一个当前类的实例,并保存到类成员变量 15 //instance中,然后直接返回成员变量 16 if(empty(self::$instance)) 17 { 18 //将实例保存到instance成员变量中 19 self::$instance = new static(); 20 //直接返回成员变量 21 return self::$instance; 22 }else{ 23 //直接返回类实例 24 return self::$instance; 25 } 26 } 27 } 28 $demo1 = Demo::getInstance();//获取到实例 29 $demo2 = new Demo();//报错
<?php //PaymentFactory.php interface PaymentFactory { //请求收款码 public function QRcode(); //监听收款 public function Listen(); } interface createPay { //将对象的创建抽象成一个接口 function createOpen($class,$data);//内向创建 function createIntro($class,$data);//外向创建 } //微信支付类 Class WxPay implements PayMentFactory { public function QRcode() { //微信业务逻辑代码 //返回收款码以及订单相关参数 return "我是微信二维码"; } public function Listen() { //微信业务逻辑代码 //返回订单结果 return "正在监听"; } } //阿里支付类 Class aliyun implements PayMentFactory { public function QRcode() { //业务逻辑代码 //返回收款码以及订单相关参数 return "我是支付宝二维码"; } public function Listen() { //业务逻辑代码 //返回订单结果 return "正在监听"; } } //实现createPay接口 class CreateP implements createPay { public function createOpen($class,$data =[]) { return new $class($data); } public function createIntro($class,$data = []) { return new $class($data); } } //开发者类 class Client{ static function Get($class,$data = []) { $fac = new CreateP(); // var_dump($fac); return $fac->createOpen($class,$data); } } $pay = Client::Get("WxPay"); echo $pay->QRcode(); //输出,我是微信二维码
<?php //全局注册类 Class Register { //存储类的实例 public static $maps; //注册操作 public static function Set($name,$cla) { //判断是否已经存储 if(array_key_exists($name,self::$maps)) { //如果全局maps内已有则直接返回 return true; }else{ //如果没有name 则将实例和name按键值对存储到成员变量内 self::$maps[$name] = $cla; return true; } } //获取类实例 public static function Get($name) { //判断name值是否存在 if(array_key_exists($name,self::$maps)) { //如果存在则直接返回对应的类的实例 return self::$maps[$name]; }else{ //如果不存在,则返回false或者其他 return false; } } }
接口 IDatabase <?php namespace IMooc; interface IDatabase { function connect($host, $user, $passwd, $dbname); function query($sql); function close(); } MySQL <?php namespace IMooc\Database; use IMooc\IDatabase; class MySQL implements IDatabase { protected $conn; function connect($host, $user, $passwd, $dbname) { $conn = mysql_connect($host, $user, $passwd); mysql_select_db($dbname, $conn); $this->conn = $conn; } function query($sql) { $res = mysql_query($sql, $this->conn); return $res; } function close() { mysql_close($this->conn); } } MySQLi <?php namespace IMooc\Database; use IMooc\IDatabase; class MySQLi implements IDatabase { protected $conn; function connect($host, $user, $passwd, $dbname) { $conn = mysqli_connect($host, $user, $passwd, $dbname); $this->conn = $conn; } function query($sql) { return mysqli_query($this->conn, $sql); } function close() { mysqli_close($this->conn); } } PDO <?php namespace IMooc\Database; use IMooc\IDatabase; class PDO implements IDatabase { protected $conn; function connect($host, $user, $passwd, $dbname) { $conn = new \PDO("mysql:host=$host;dbname=$dbname", $user, $passwd); $this->conn = $conn; } function query($sql) { return $this->conn->query($sql); } function close() { unset($this->conn); } }
<?php //EventGenerator //事件触发抽象类 abstract class EvemtGenerator { //存储观察者类 private $observer =[]; //添加观察者操作 public function AddOb(Observer $observer) { $this->observer[] = $observer; } //观察者通知操作 public function notify() { //循环类成员变量,并执行对应的观察者更新方法 foreach ($this->observer as $observer) { //执行每个观察者类内的更新操作 $observer->update(); } } } //定义观察者接口 interface Observer { public function update(); } //实现一个被观察者类 Class Test extends EvemtGenerator { //实现一个登陆方法 public function login() { return "登陆成功"; } } //实现一个观察者 Class Observer1 implements Observer { //定义一个逻辑更新操作 例如:添加了csrf验证 public function update() { if($_POST[‘csrf‘] == getCsrf()) { return true; }else{ exit("csrf验证不正确"); } } } //实例化Test类 被观察 $event = new Test(); $event->AddOb(new Observer1()); $event->login(); //更新通知操作 $event->notify();
//定义策略接口,规范策略行为 interface UserStrategy { public function show(); public function message(); } //定义一个喜欢买西装的用户类 Class SuitUser implements UserStrategy { public function show() { //为用户跳转到西装页面 return "跳转到西装页面"; } public function message() { //发送message echo "即将为您展示最新的西装某某某"; } } //定义一个喜欢买裙子的用户类 Class skirtUser implements UserStrategy { public function show() { //为用户跳转到西装页面 return "跳转到裙子推荐页面"; } public function message() { //发送message echo "即将为您展示最新的裙子某某某"; } } //定义一个业务类 Class Users { //存储对应的用户类 private $userCla; //执行策略接口 public function Start() { echo "跳转页面是:".$this->strategy->show(); echo "消息是:".$this->strategy->message(); } //注册对应的用户类 public function SetStrategy(UserStrategy $strategy) { $this->$userCla = $strategy; } } //业务逻辑代码 判断用户习性 $user1 = "西装"; $user2 = "裙子"; $userL = new Users(); //如果用户习性为喜欢看西装或者买西装则 if ($user1 == "西装"){ $userL->SetStrategy(new SuitUser()); $userL->Start(); }
PHP常用设计模式,PHP常用设计模式详解,PHP详解设计模式,PHP设计模式
原文:https://www.cnblogs.com/death-satan/p/12683321.html