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知识库 -> PHP设计模式-策略、适配器、观察者 -> 正文阅读

[PHP知识库]PHP设计模式-策略、适配器、观察者

策略模式

  • 特点
    定义一系列算法封装起来, 让他们可以相互替代,策略模式提供了管理相关算法族的办法, 提供了可以体会继承关系的棒法, 避免使用多重条件转移语句
  • 实现
<?php
abstract class Strategy
{
    abstract function goSchool();
}

class Run extends Strategy
{
    public function goSchool() {
        echo "走路去学校";
    }
}

class Subway extends Strategy
{
    public function goSchool() {
        echo "地铁去学校";
    }
}

class Bike extends Strategy
{
    public function goSchool() {
        echo "公交去学校";
    }
}

class GoSchoolContext
{
    protected $_stratege;
    
    public function __construct($stratege) {
        $this->_stratege = $stratege;
    }
    
    public function goSchool()
    {
        $this->_stratege->goSchool();
    }
}

$traget = new Run();
$obj = new GoSchoolContext($traget);
$obj->goSchool();

适配器模式

  • 特点
    需要的东西在面前,但却不能用,而短时间又无法改造它,于是就想办法适配
  • 实现
// 适配器
interface Charget
{
    public function putCharget();
}

class China implements Charget
{
    private $v = 220;
    
    public function putCharget()
    {
        return $this->v;
    }
}

class Adper extends China
{
    public function putCharget() {
        return parent::putCharget() / 2 + 10;
    }
}

class Phone
{
    public function charge(Charget $charge)
    {
        if ($charge->putCharget() != "120") {
            echo "不能充电";
        } else {
            echo "能充电";
        }
    }
}

$china = new China();
$adper = new Adper();

$phone = new Phone();
$phone->charge($adper);

观察者模式

  • 特点
    当一个对象状态发生变化时, 依赖他的对象全部收到通知, 并主动更新。观察者模式实现了低耦合, 非侵入式的通知与更新机制。
  • 实现
<?php
// 主题接口
interface Subject
{
    public function register(Observer $observer);
}

// 观察者接口
interface Observer
{
    public function watch();
}

// 主题
class WatchAction implements Subject
{
    public $_observers = [];
    public function register(\Observer $observer) {
        $this->_observers[] = $observer;
    }
    
    public function notify()
    {
        foreach($this->_observers as $object) {
            $object->watch();
        }
    }
    
}

// 观察者
class Cat1 implements Observer{
    public function watch(){
        echo "Cat1 watches TV<hr/>";
    }
}

class Dog1 implements Observer{
    public function watch(){
        echo "Dog1 watches TV<hr/>";
    }
}
 
 class People implements Observer{
    public function watch(){
        echo "People watches TV<hr/>";
    }
 }
 
$action = new WatchAction();
$action->register(new Cat1());
$action->register(new People());
$action->register(new Dog1());
$action->notify();
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:12:05  更:2022-03-15 22:12:17 
 
开发: 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年5日历 -2024/5/19 2:02:04-

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