IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 96.2 设计模式,php代码实现 -> 正文阅读

[PHP知识库]96.2 设计模式,php代码实现

设计模式:
工厂模式,使对象有一个统一生成(实例化)的入口。
简单工厂,也称静态工厂的例子:

// Factory
class Factory
{
    public static function createProduct(string $type) : Product
{
        $product = null;
        switch ($type) {
            case 'A':
                $product = new ProductA();
                break;
            case 'B':
                $product = new ProductB();
                break;
        }
        return $product;
    }
}

产品接口和产品实现

// Products
interface Product
{
    public function show();
}

class ProductA implements Product
{
    public function show()
{
        echo 'Show ProductA';
    }
}

class ProductB implements Product
{
    public function show()
{
        echo 'Show ProductB';
    }
}

//客户端调用
$productA = Factory::createProduct('A');
$productB = Factory::createProduct('B');
$productA->show();
$productB->show();

单例模式:

class Singleton{
    //私有属性,用于保存实例
    private static $instance;
    //构造方法私有化,防止外部创建实例
    private function __construct(){}
    //公有属性,用于测试
    public $a;
    //公有方法,用于获取实例
    public static function getInstance(){
        //判断实例有无创建,没有的话创建实例并返回,有的话直接返回
        if(!(self::$instance instanceof self)){
            self::$instance = new self();
        }
        return self::$instance;
    }
    //克隆方法私有化,防止复制实例
    private function __clone(){}
}

发布订阅模式

<?php
    //定义Observer接口
    interface Observer 
    {
        function notify($msg);
    }

    //User用户实现Observer接口
    class User implements Observer {
        public $name;

        public function __construct($name) {
            $this->$name = $name;
            Msg::getInstance()->register($this);
        }

        public function notify($msg) {
            echo $this->name . ' '. 'recive msg' .$msg.'\r\n';
        }
    }

    class Msg 
    {
        private $obeservers = [];
        private static $_instance ;

        public static function getInstance() 
        {
            if(!self::$_instance) {
                self::$_instance = new self();
            }
            return self::$_instance;
        }

        public function publish($msg) {
            foreach ($this->observers as $observer) {
                $observer->notify($msg);
            }
        }

        function register(Observer $o) {
            $this->observers[] = $o;

        }
    }

$user1 = new User('xushengbin');
$user2 = new User('zhuqiaozhen');
$msg = Msg::getInstance()->publish('今天要下雨了');

参考文献:
[1] PHP设计模式之简单工厂模式 ZyBlog 硬核项目经理

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-12-11 15:31:14  更:2021-12-11 15:32:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 21:29:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计