PHP设计模式的策略,适配器和观察者模式详解
吾爱主题
阅读:220
2022-11-03 16:22:00
评论:0
策略模式
特点
定义一系列算法封装起来, 让他们可以相互替代,策略模式提供了管理相关算法族的办法, 提供了可以体会继承关系的棒法, 避免使用多重条件转移语句
实现
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <?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(); |
适配器模式
特点
需要的东西在面前,但却不能用,而短时间又无法改造它,于是就想办法适配
实现
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | // 适配器 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 ); |
观察者模式
特点
当一个对象状态发生变化时, 依赖他的对象全部收到通知, 并主动更新。观察者模式实现了低耦合, 非侵入式的通知与更新机制。
实现
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | <?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(); |
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注服务器之家的更多内容!
原文链接:https://blog.csdn.net/weixin_39218464/article/details/123443905
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。