[关闭]
@Chiang 2020-01-03T10:58:02.000000Z 字数 1415 阅读 549

结构型--代理模式

设计模式


  • 抽象主题接口
  • 真实主题类
  • 代理角色

代理模式

抽象主题接口

  1. <?php
  2. /**
  3. * Subject.php
  4. *
  5. * @author Luffy <lufei@swoole.com>
  6. * @date 2019/12/16
  7. * @copyright Swoole, Inc.
  8. * @package sy-records/design-patterns
  9. */
  10. namespace Luffy\DesignPatterns\Proxy;
  11. interface Subject
  12. {
  13. public function get();
  14. public function put();
  15. }

真实主题类

  1. <?php
  2. /**
  3. * RealSubject.php
  4. *
  5. * @author Luffy <lufei@swoole.com>
  6. * @date 2019/12/16
  7. * @copyright Swoole, Inc.
  8. * @package sy-records/design-patterns
  9. */
  10. namespace Luffy\DesignPatterns\Proxy;
  11. class RealSubject implements Subject
  12. {
  13. public function get()
  14. {
  15. echo __CLASS__ . " get\n";
  16. }
  17. public function put()
  18. {
  19. echo __CLASS__ . " put\n";
  20. }
  21. }

代理角色

  1. <?php
  2. /**
  3. * Proxy.php
  4. *
  5. * @author Luffy <lufei@swoole.com>
  6. * @date 2019/12/16
  7. * @copyright Swoole, Inc.
  8. * @package sy-records/design-patterns
  9. */
  10. namespace Luffy\DesignPatterns\Proxy;
  11. class Proxy
  12. {
  13. /**
  14. * @var RealSubject
  15. */
  16. protected $realSubject;
  17. /**
  18. * Proxy constructor.
  19. */
  20. public function __construct()
  21. {
  22. $this->realSubject = new RealSubject();
  23. }
  24. public function __call($name, $arguments)
  25. {
  26. return $this->realSubject->{$name}(...$arguments);
  27. }
  28. // public function get()
  29. // {
  30. // $this->realSubject->get();
  31. // }
  32. public function send()
  33. {
  34. echo __CLASS__ . " send\n";
  35. }
  36. }

客户端调用

  1. <?php
  2. /**
  3. * Client.php
  4. *
  5. * @author Luffy <lufei@swoole.com>
  6. * @date 2019/12/16
  7. * @copyright Swoole, Inc.
  8. * @package sy-records/design-patterns
  9. */
  10. namespace Luffy\DesignPatterns\Proxy;
  11. include __DIR__ . '/../vendor/autoload.php';
  12. class Client
  13. {
  14. public static function run()
  15. {
  16. $proxy = new Proxy();
  17. $proxy->get();
  18. $proxy->put();
  19. $proxy->send();
  20. }
  21. }
  22. Client::run();

参考资料:
swoole微课堂
示例代码

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注