• PHP 设计模式【单、工、注、适、策、观】 先简单写6个


    #PHP 设计模式

    # 1 单例 模式 4私1公 应用场景:数据库连接 只需要实例化一次

    class Single{
    private static $num = 0; # 私有化静态属性
    private static $instance = null; # 私有化静态属性
    private function __construct(){} #禁止外部被实例化
    private function __clone(){} # 禁止被克隆
    private function __wakeup(){} # 禁止被重建
    public static function getInstance(){ # 提供外部唯一访问入口
    return self::$instance ?: new self();
    }
    public function test(){ # 测试函数
    echo self::$num ++;
    }
    }
    $single = Single::getInstance();
    $single->test();
    $single->test();
    $single->test();
    $single->test();
    $single->test();
    $single->test();

    # 工厂模式
    # 如果以后更换类名,不需要在每一个调用他的方法里面改, 只需要改 Factory 里面实例化的类名就行
    class worker{
    public static function work(){
    echo '上班';
    }
    }

    class Factory{
    public static function createWorkerFactory(){
    return new worker();
    }
    }
    $worker = Factory::createWorkerFactory();
    $worker::work();

    # 注册树模式
    // 把类信息 塞到数组里面, 用的时候可以直接从数组取, 不想用了,就 unset数组 销毁掉
    // laravel 底层里面用的多【eg:容器里面的服务绑定基本上都是】,这里就不举例了


    # 适配器模式 其实也就是接口 interFace # 应用场景: 为后面实现这个接口的类 规定统一标准 【即一样的函数名】
    interface Model{
    public function connect();
    public function query();
    public function close();
    }
    class MySQL implements Model{
    public function connect(){
    echo 'MySQL 连接';
    }
    public function query(){
    echo 'MySQL 查询';
    }
    public function close(){
    echo 'MySQL 关闭';
    }
    }

    class MongoDB implements Model{
    public function connect(){
    echo 'MongoDB 连接';
    }
    public function query(){
    echo 'MongoDB 查询';
    }
    public function close(){
    echo 'MongoDB 关闭';
    }
    }


    # 策略模式
    # 策略模式,将一组特定的行为和算法封装成类,以适应某些特定的上下文环境 也算是适配器模式的延伸 应用场景: 数据库驱动切换 缓存驱动切换
    class Driver{
    protected $driver;
    public function selectDriver(Model $model){
    $this->driver = $model;
    }
    public function modelInfo(){
    $this->driver->connect();
    $this->driver->query();
    $this->driver->close();
    }
    }
    $driver = new Driver();
    $driver->selectDriver(new MySQL);
    $driver->modelInfo();
    $driver->selectDriver(new MongoDB);
    $driver->modelInfo();


    # 观察者模式
    # 观察者模式(Observer),当一个对象状态发生变化时,依赖它的对象全部会收到通知,并自动更新 应用场景:队列 一直生产 然后统一消费
    interface consume{
    public function pop(); # 这里就是在消费发生后要执行的逻辑
    }
    class Queue{
    private $observers = [];
    public function push(Consume $consume){ #一直生产
    $this->observers[] = $consume;
    }
    public function pop(){ # 统一消费
    foreach ($this->observers as $observer){
    $observer->pop();
    }
    $this->observers = [];
    }
    }

    class ShopOrder implements Consume{
    public function pop(){
    echo '商城订单出队';
    }
    }

    class TuanOrder implements Consume{
    public function pop(){
    echo '拼团订单出队';
    }
    }

    $queue = new Queue;
    $queue->push(new ShopOrder);
    $queue->push(new ShopOrder);
    $queue->push(new ShopOrder);
    $queue->push(new ShopOrder);
    $queue->push(new TuanOrder);
    $queue->push(new TuanOrder);
    $queue->push(new TuanOrder);
    $queue->pop();
  • 相关阅读:
    BUAA 2020 软件工程 个人项目作业
    BUAA 2020 软件工程 个人博客作业
    BUAA 2020 软件工程 热身作业
    面向对象设计与构造2019 第四单元总结博客作业
    面向对象设计与构造2019 第三单元总结博客作业
    Windows 安装rabbitmq
    windows 安装mongodb4.2.7
    docker安装(ubuntu20.04)
    C# 文件操作
    经纬度转换 sql 自定义函数
  • 原文地址:https://www.cnblogs.com/wangshuazi/p/14627091.html
Copyright © 2020-2023  润新知