这篇文章主要为大家详细介绍了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通用化的CURD的实现 2023-03-17
- PHP中PDO事务处理操作示例 2022-10-15
- PHP简单实现二维数组的矩阵转置操作示例 2022-10-02
- windows下9款一键快速搭建PHP本地运行环境的好工具(含php7.0环境) 2023-09-02
- Laravel balde模板文件中判断数据为空方法 2023-08-30
- 用nohup命令实现PHP的多进程 2023-09-02
- laravel实现按月或天或小时统计mysql数据的方法 2023-02-22
- php微信公众号开发之秒杀 2022-11-23
- PHP仿tp实现mvc框架基本设计思路与实现方法分析 2022-10-18
- PHP实现微信支付(jsapi支付)流程步骤详解 2022-10-09