摘要:简单工厂模式共同接口服务器端开发不知道将会被谁调用连接上了连接上了客户端调用时,不知道工厂类中实例化的几种类,只需要传递参数就可以工厂模式共同接口服务器端开发不知道将会被谁调用连接上了连接上了服务器端添加了类前面的代码不用修改连接上了客户
简单工厂模式
// 共同接口 interface db{ function conn(); } // 服务器端开发(不知道将会被谁调用) class dbsqlite implements db{ public function conn(){ echo "连接上了sqlite"; } } class dbmysql implements db{ public function conn(){ echo "连接上了mysql"; } } class Factory{ public static function creatDB($type){ if($type == "mysql"){ return new dbmysql(); }elseif($type == "sqlite"){ return new dbsqlite(); }else{ throw new Exception("Error DB type", 1); } } } // 客户端调用时,不知道工厂类中实例化的几种类,只需要传递$type参数就可以 $db = Factory::creatDB("mysql"); $db->conn();工厂模式
// 共同接口 interface db{ function conn(); } interface Factory{ function createDB(); } // 服务器端开发(不知道将会被谁调用) class dbsqlite implements db{ public function conn(){ echo "连接上了sqlite"; } } class dbmysql implements db{ public function conn(){ echo "连接上了mysql"; } } class mysqlFactory implements Factory{ public function createDB(){ return new dbmysql(); } } class sqliteFactory implements Factory{ public function createDB(){ return new dbsqlite(); } } // =====服务器端添加了Oracle类 // 前面的代码不用修改 class dboracle implements db{ public function conn(){ echo "连接上了oracle"; } } class oracleFactory implements Factory{ public function createDB(){ return new dboracle(); } } // =====客户端开始==== $fact = new mysqlFactory(); $db = $fact->createDB(); $db->conn(); $fact = new sqliteFactory(); $db = $fact->createDB(); $db->conn(); $fact = new oracleFactory(); $db = $fact->createDB(); $db->conn(); // 在面向对象设计法则中,重要的开闭原则--对于修改是封闭的,对于扩展是开放的单例模式
// 第二步 封锁new操作 class sigle{ protected static $ins = null; // 方法前加final,则方法不能被覆盖,在类前加final,则不能被继承 final protected function __contruct(){ } public static function getIns(){ if(self::$ins === null){ self::$ins = new self(); } return self::$ins; } // 防止被克隆 final protected function __clone(){} } $s1 = sigle::getIns(); // $s2 = clone $s1; $s2 = sigle::getIns(); if($s1 === $s2){ echo "同一个对象"; }else{ echo "不是同一个对象"; }观察者模式
class User implements SplSubject{ public $lognum; public $hobby; protected $observers = null; public function __construct($hobby){ $this->lognum = rand(1,10); $this->hobby = $hobby; $this->observers = new SplObjectStorage(); } public function login(){ $this->notify(); } public function attach(SplObserver $observer){ $this->observers->attach($observer); } public function detach(SplObserver $observer){ $this->observers->detach($observer); } public function notify(){ $this->observers->rewind(); while ($this->observers->valid()) { $observer = $this->observers->current(); $observer->update($this); $this->observers->next(); } } } class security implements SplObserver{ public function update(SplSubject $subject){ if($subject->lognum<3){ echo "这是第".$subject->lognum."次安全登录"; }else{ echo "这是第".$subject->lognum."次登录,异常"; } } } class ad implements SplObserver{ public function update(SplSubject $subject){ if($subject->hobby == "sports"){ echo "篮球"; }else{ echo "好好学习"; } } } // 实施观察 $user = new User("sports"); $user->attach(new security()); $user->attach(new ad()); $user->login();装饰器模式
// 装饰器模式做文章修饰功能 class baseArt{ protected $content; protected $art = null; public function __construct($content){ $this->content = $content; } public function decorator(){ return $this->content; } } // 编辑文章摘要 class editorArt extends baseArt{ public function __construct(baseArt $art){ $this->art = $art; $this->decorator(); } public function decorator(){ //return $this->art->content .= "小编摘要"; return $this->content = $this->art->decorator() . "小编摘要"; } } // SEO添加内容 class SEOart extends baseArt{ public function __construct(baseArt $art){ $this->art = $art; $this->decorator(); } public function decorator(){ return $this->content = $this->art->decorator() . "SEO关键词"; } } // 无论是哪个先编辑,顺序都可以进行交换 $x = new SEOart(new editorArt(new baseArt("天天向上"))); $y = new editorArt(new SEOart(new baseArt("天天向上"))); echo $x->decorator(); echo "
"; echo $y->decorator();
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/30944.html
摘要:接下来会对其中五个比较常见的运行模式进行说明。模式是目前主流的服务运行模式,拥有高效可靠的性能,推荐大家使用。由于微软的排他性,只能运行于环境。 SAPI 这里所说的 PHP 运行模式, 其实指的是 SAPI (Server Application Programming Interface,服务端应用编程端口 )。SAPI 为 PHP 提供了一个和外部通信的接口, PHP 就是通过这...
摘要:当客户端请求到达时,进程管理器选择并连接到一个解释器。子进程完成处理后将标准输出和错误信息从同一连接返回。子进程接着等待并处理来自进程管理器运行在中的下一个连接。 目前常见的4种PHP运行模式 CGI通用网关接口模式 FAST-CGI模式 CLI命令行模式 模块模式 运行模式 CGI通用网关接口模式 每有一个用户请求,都会先要创建cgi的子进程,然后处理请求,处理完后结束这个子进程...
摘要:话说当下一共有种运行模式,分别是和模块模式。使用,全称进程管理器进行管理。工作原理启动时载入进程管理器进程管理器自身初始化,启动多个解释器进程并等待来自的连接当客户端请求到达时,进程管理器选择并连接到一个解释器。 我们知道 workerman 程序需要在php-cli模式下运行,也就是命令行模式,这块我们有必要了解一下。 话说PHP当下一共有4种运行模式,分别是CGI、FastCGI、...
阅读 3092·2021-11-22 09:34
阅读 592·2021-11-22 09:34
阅读 2436·2021-10-08 10:18
阅读 3371·2021-09-22 15:57
阅读 2584·2021-09-22 15:25
阅读 2397·2019-08-30 15:54
阅读 2092·2019-08-30 15:44
阅读 1798·2019-08-29 11:18