PHP设计模式的策略,适配器和观察者模式详解

 更新时间:2022年03月13日 18:09:13   作者:刘远山  
这篇文章主要为大家详细介绍了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();

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容! 

 

相关文章

  • 利用swoole+redis实现股票和区块链服务

    利用swoole+redis实现股票和区块链服务

    这篇文章主要给大家介绍了关于利用swoole+redis实现股票和区块链服务的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习下吧。
    2017-09-09
  • PHP SPL标准库中的常用函数介绍

    PHP SPL标准库中的常用函数介绍

    这篇文章主要介绍了PHP SPL标准库中的常用函数介绍,本文着重讲解了spl_autoload_extensions()、spl_autoload_register()、spl_autoload()三个函数,需要的朋友可以参考下
    2015-05-05
  • PHP日期时间函数的高级应用技巧

    PHP日期时间函数的高级应用技巧

    PHP的日期时间函数date()中介绍了PHP日期时间函数的简单用法,这类将介绍更多的函数来丰富我们的应用。
    2009-05-05
  • PHP抽象类与接口的区别实例详解

    PHP抽象类与接口的区别实例详解

    这篇文章主要介绍了PHP抽象类与接口的区别,结合实例形式分析了php抽象类与接口的概念、区别、使用方法及相关操作注意事项,需要的朋友可以参考下
    2019-05-05
  • PHP中执行cmd命令的方法

    PHP中执行cmd命令的方法

    这篇文章主要介绍了PHP中执行cmd命令的方法,需要的朋友可以参考下
    2014-10-10
  • PHP获取QQ达人QQ信息的方法

    PHP获取QQ达人QQ信息的方法

    这篇文章主要介绍了PHP获取QQ达人QQ信息的方法,实例分析了php获取QQ信息的原理与对应的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • PHP设计模式之迭代器模式浅析

    PHP设计模式之迭代器模式浅析

    迭代器(Iterator)模式,它在一个很常见的过程上提供了一个抽象:位于对象图不明部分的一组对象(或标量)集合上的迭代。迭代有几种不同的具体执行方法:在数组属性,集合对象,数组,甚至一个查询结果集之上迭代
    2023-04-04
  • php实现收发邮件的方法详解

    php实现收发邮件的方法详解

    这篇文章主要为大家详细介绍了php实现收发邮件的多种方法总结,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以跟随小编一起了解下
    2023-11-11
  • PHP 输出缓冲控制(Output Control)详解

    PHP 输出缓冲控制(Output Control)详解

    本文主要介绍PHP 输出缓冲控制,这里提供了详细的相关资料及简单示例代码,帮助大家学习参考,有兴趣的小伙伴可以参考下
    2016-08-08
  • php微信公众开发之获取周边酒店信息的方法

    php微信公众开发之获取周边酒店信息的方法

    这篇文章主要介绍了php微信公众开发之获取周边酒店信息的方法,涉及针对微信公众平台关于地理信息的应用技巧,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-12-12

最新评论