资讯专栏INFORMATION COLUMN

PHP设计模式

caige / 2639人阅读

摘要:简单工厂模式共同接口服务器端开发不知道将会被谁调用连接上了连接上了客户端调用时,不知道工厂类中实例化的几种类,只需要传递参数就可以工厂模式共同接口服务器端开发不知道将会被谁调用连接上了连接上了服务器端添加了类前面的代码不用修改连接上了客户

简单工厂模式
// 共同接口
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

相关文章

  • PHP基础

    摘要:分别为适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。设计模式五适配器模式适配器模式将某个对象的接生成器和协程的实现在这篇文章中,作者针对那些比较难以理解的概念,以一个更为通俗的方式去讲明白。。 PHP 源码注解 PHP 的详细源码注解 PHP 字符串操作整理 一些有关字符串的常用操作。 Redis 常见七种使用场景 (PHP 实战) 这篇文章主要介绍利用 R...

    HtmlCssJs 评论0 收藏0
  • PHP 运行模式

    摘要:接下来会对其中五个比较常见的运行模式进行说明。模式是目前主流的服务运行模式,拥有高效可靠的性能,推荐大家使用。由于微软的排他性,只能运行于环境。 SAPI 这里所说的 PHP 运行模式, 其实指的是 SAPI (Server Application Programming Interface,服务端应用编程端口 )。SAPI 为 PHP 提供了一个和外部通信的接口, PHP 就是通过这...

    OnlyMyRailgun 评论0 收藏0
  • php资料集

    摘要:简单字符串缓存实战完整实战种设计模式设计模式是面向对象的最佳实践成为专业程序员路上用到的各种优秀资料神器及框架成为一名专业程序员的道路上,需要坚持练习学习与积累,技术方面既要有一定的广度,更要有自己的深度。 微型新闻系统的开发(PHP 5.4 + MySQL 5.5) 微型新闻系统的开发(PHP 5.4 + MySQL 5.5) 九个很有用的 PHP 代码 php 代码 国内值得关注的...

    RobinQu 评论0 收藏0
  • PHP相关

    摘要:的机器学习库的机器学习库,包括算法交叉验证神经网络等内容。在即将到来的大会上,她将和大家分享在机器学习领域的全新可能。入门总结入门相关,如安装配置基本使用等。 基于 Swoole 开发 PHP 扩展 Swoole-1.9.7 增加了一个新特性,可以基于 Swoole 使用 C++ 语言开发扩展模块,在扩展模块中可以注册 PHP 内置函数和类。现在可以基于 Swoole 来编写 PHP ...

    lewinlee 评论0 收藏0
  • PHP 运行模式与运行原理

    摘要:当客户端请求到达时,进程管理器选择并连接到一个解释器。子进程完成处理后将标准输出和错误信息从同一连接返回。子进程接着等待并处理来自进程管理器运行在中的下一个连接。 目前常见的4种PHP运行模式 CGI通用网关接口模式 FAST-CGI模式 CLI命令行模式 模块模式 运行模式 CGI通用网关接口模式 每有一个用户请求,都会先要创建cgi的子进程,然后处理请求,处理完后结束这个子进程...

    Pocher 评论0 收藏0
  • workerman / 小谈PHP中的几种运行模式

    摘要:话说当下一共有种运行模式,分别是和模块模式。使用,全称进程管理器进行管理。工作原理启动时载入进程管理器进程管理器自身初始化,启动多个解释器进程并等待来自的连接当客户端请求到达时,进程管理器选择并连接到一个解释器。 我们知道 workerman 程序需要在php-cli模式下运行,也就是命令行模式,这块我们有必要了解一下。 话说PHP当下一共有4种运行模式,分别是CGI、FastCGI、...

    darkbaby123 评论0 收藏0

发表评论

0条评论

caige

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<