欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

三个类概括PHP的五种设计模式

程序员文章站 2022-05-15 17:52:48
...
工厂模式
单元素模式
观察者模式
命令链模式
策略模式
  1. class people {
  2. private $name = '';
  3. private $user = null;
  4. private function __constract($name){/*此处private定义辅助实现 单元素模式*/
  5. $this->name = $name;
  6. }
  7. public static function instance($name){/*此方法实现 工厂模式*/
  8. static $object = null;/*此变量实现 单元素模式*/
  9. if (is_null($object))
  10. $object = new people($name);
  11. return $object;
  12. }
  13. public function work_in($who=null)
  14. {
  15. if (is_null($who)) echo 'error';
  16. else {
  17. $this->user[] = $who;/*此数组变量实现 观察者模式*/
  18. echo $who->work();/*此方法调用实现 策略模式*/
  19. }
  20. }
  21. public function on_action($which=''){
  22. if (empty($which)) echo 'error';
  23. else {
  24. foreach ($this->user as $user)
  25. $user->action($which);/*此方法调用实现 命令链模式*/
  26. }
  27. }
  28. }
  29. $people = people::instance('jack');
  30. $people->work_in(new student);
  31. $people->work_in(new teacher);
  32. $people->on_action('eat');
  33. class student {
  34. function work(){
  35. echo '
    我是学生,朝九晚五。';
  36. }
  37. function action($which){
  38. if (method_exists($this, $which)) return $this->$which();
  39. else echo 'you are wrong!';
  40. }
  41. function eat(){
  42. echo '
    我是学生,只能吃套餐。';
  43. }
  44. }
  45. class teacher {
  46. function work(){
  47. echo '
    我是老师,晚上备课最忙。';
  48. }
  49. function action($which){
  50. if (method_exists($this, $which)) return $this->$which();
  51. else echo 'i can not do it!';
  52. }
  53. function eat(){
  54. echo '
    我是老师,可以每天吃大餐。';
  55. }
  56. }
复制代码