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.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容