• 单例模式
  1. <?php
  2. class mysingle
  3. {
  4. private static $myinstance =null;
  5. private function __construct()
  6. {
  7. }
  8. private function __clone()
  9. {
  10.  
  11. }
  12. public static function createobject()
  13. {
  14. if (self::$myinstance==null)
  15. {
  16. self::$myinstance = new self();
  17. }
  18. return self::$myinstance;
  19. }
  20. }
  21. $thesingle = mysingle::createobject();
  22. $anothersingle = mysingle::createobject();
  23. echo ($thesingle===$anothersingle);
  24. ?>

输出结果:

1

说明两个对象完全一致

  • 观察者模式

被观察者(dingdaguo)做出某种行为(drink_cola())时,触发监控者(coach)的做出一些反应(persuade)

  1. <?php
  2. class dingdaguo
  3. {
  4. protected $observers = [];
  5. public function addobserver($myobserver)
  6. {
  7. $this->observers[] = $myobserver;
  8. }
  9. public function drink_cola()
  10. {
  11. foreach($this->observers as $observer)
  12. {
  13. $observer->persuade();
  14. }
  15. }
  16. public function delobsrver($observer)
  17. {
  18. $index = array_search($observer,$this->observers,);
  19. $this->observers=array_slice($this->observers,,$index);
  20. }
  21. }
  22.  
  23. class coach
  24. {
  25. public function __construct($name)
  26. {
  27. $this->name = $name;
  28. }
  29.  
  30. public function persuade()
  31. {
  32. echo $this->name."说:别喝可乐了,都是甜的东西".PHP_EOL;
  33. }
  34. }
  35. $cpc = new coach("陈培昌");
  36. $cj = new coach("程劲");
  37. $dy = new dingdaguo();
  38. $dy->addobserver($cpc);
  39. $dy->addobserver($cj);
  40. $dy->drink_cola();
    echo "删除其中一个对象".PHP_EOL;
    $dy->delobsrver($cj);
    $dy->drink_cola();

输出结果:

陈培昌说:别喝可乐了,都是甜的东西
程劲说:别喝可乐了,都是甜的东西
删除其中一个对象
陈培昌说:别喝可乐了,都是甜的东西

  • 适配器

实现接口的过程中,所有类都按照一种方式实现接口

  1. <?php
  2. interface martial_trainning
  3. {
  4. public function welcomeword();
  5. public function braziljudo();
  6. public function muaythai();
  7. }
  8. class xxd
  9. {
  10. public function welcomeword()
  11. {
  12. echo "欢迎来到必图训练".PHP_EOL;
  13. }
  14. }
  15. class cj
  16. {
  17. public function braziljudo()
  18. {
  19. echo "我是小烤肠,来跟我一起学巴西柔术吧".PHP_EOL;
  20. }
  21. }
  22.  
  23. class cpc implements martial_trainning
  24. {
  25. protected $myxxd = null;
  26. protected $mycj = null;
  27. public function __construct($xxd,$cj)
  28. {
  29. $this->myxxd = $xxd;
  30. $this->mycj = $cj;
  31. }
  32. public function welcomeword()
  33. {
  34. // TODO: Implement welcomeword() method.
  35. $this->myxxd->welcomeword();
  36. }
  37. public function braziljudo()
  38. {
  39. // TODO: Implement braziljudo() method.
  40. $this->mycj->braziljudo();
  41. }
  42. public function muaythai()
  43. {
  44. echo "我是小松鼠,跟我一起练习泰拳吧".PHP_EOL;
  45. }
  46. }
  47.  
  48. $cj = new cj();
  49. $xxd = new xxd();
  50. $cpc = new cpc($xxd,$cj);
  51. $cpc->braziljudo();
  52. $cpc->welcomeword();
  53. $cpc->muaythai();
  54. ?>

输出结果:

我是小烤肠,来跟我一起学巴西柔术吧
欢迎来到必图训练
我是小松鼠,跟我一起练习泰拳吧

  • 策略模式

通过可以预测的参数传入,来决定调用哪个类的实现

  1. <?php
  2. interface martial_trainning
  3. {
  4. public function hoaring();
  5. }
  6. class xxd implements martial_trainning
  7. {
  8. public function hoaring()
  9. {
  10. echo "诶斯~诶斯~".PHP_EOL;
  11. }
  12. }
  13. class cj implements martial_trainning
  14. {
  15. public function hoaring()
  16. {
  17. echo "诶~嘿嘿".PHP_EOL;
  18. }
  19. }
  20. class cpc implements martial_trainning
  21. {
  22. public function hoaring()
  23. {
  24. echo "嗷儿喂~嗷儿喂~";
  25. }
  26. }
  27. class mycoach
  28. {
  29. protected $myobject = null;
  30. public function __construct($whichobject)
  31. {
  32. $this->myobject = $whichobject;
  33. }
  34. public function hoaring()
  35. {
  36. $this->myobject->hoaring();
  37. }
  38. }
  39. $cpc = new cpc();
  40. $mycoach = new mycoach($cpc);
  41. $mycoach->hoaring();
  42. echo PHP_EOL."===========换了一个类=============".PHP_EOL;
  43. $cj = new cj();
  44. $mycoach = new mycoach($cj);
  45. $mycoach->hoaring();
  46. ?>

输出结果:

嗷儿喂~嗷儿喂~
===========换了一个类=============
诶~嘿嘿

PHP类的设计模式的更多相关文章

  1. 一种JavaScript 类的设计模式

    一种JavaScript 类的设计模式尽管前面介绍了如何定义一个类,如何初始化一个类的实例,但既可以在function定义的函数体中添加成员,又可以用prototype 定义类的成员,代码显的很混乱, ...

  2. 10月27日PHP加载类、设计模式(单例模式和工厂模式)、面向对象的六大原则

    加载类可以使用include.require.require_once三种中的任意一种,每个关键字都有两种方法,但是这种方法的缺点是需要加载多少个php文件,就要写多少个加载类的方法.一般也就需要加载 ...

  3. 游戏设计模式——C++单例类

    前言: 本文将探讨单例类设计模式,单例类的懒汉模式/饿汉模式,单例类的多线程安全性,最后将利用C++模板减少单例类代码量. 本文假设有一个Manager管理类,并以此为探究单例类的设计模式. 懒汉模式 ...

  4. 设计模式——抽象工厂(Abstract Factory)

    Abstract Factory 抽象工厂模式(创建型模式): new的问题:实现依赖,不能应变应对“具体实例化类型”的变化. 解决思路:--封装变化点:哪里变化,封装哪里           - - ...

  5. IOS设计模式第一篇之MVC

    设计模式的好处:我们可以写出容易理解,重用度很高的代码.降低代码的耦合度,符合软件工程的思想. 设计模式主要分为三类:创造型的:单例和抽象工厂.结构类型的: MVC  Decorator, Adapt ...

  6. (转)C++——std::string类的引用计数

    1.概念 Scott Meyers在<More Effective C++>中举了个例子,不知你是否还记得?在你还在上学的时候,你的父母要你不要看电视,而去复习功课,于是你把自己关在房间里 ...

  7. Java设计模式之策略设计模式

    1.什么是-策略设计模式 在软件开发中常常遇到这种情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能.如查找.排序等,一种常用的方法是硬编码(Ha ...

  8. python设计模式浅析

    今天简单聊聊python的设计模式,GOF设计模式(c++)和Head first design pattern(Java)是两本设计模式的经典,基本可以照搬在python上面,但是你会发现pytho ...

  9. 结合JDK源码看设计模式——单例模式

    定义: 保证一个类仅有一个实例,并提供一个全局访问点 适用场景: 确保任何情况下这个对象只有一个实例 详解: 私有构造器 单利模式中的线程安全+延时加载 序列化和反序列化安全, 防止反射攻击 结合JD ...

随机推荐

  1. input框改变默认样式

      input[type="radio"] { width: 2rem; height: 2rem; -webkit-appearance: none; /*清除复选框默认样式*/ ...

  2. ######【Python】【基础知识】Python的介绍 ######

    Python 是一种面向对象.解释型计算机程序设计语言. Python是什么? Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言 ...

  3. Jenkins+SVN持续环境搭建

    需要三台不同环境的服务器,SVN.Jenkins.Tomcat 1.SVN搭建 1.Subversion服务器(SVN服务器) 2.项目对应的版本库 3.版本库中钩子程序(用于触发构建命令) 在我以前 ...

  4. php面试相关整理

    1.HTTP Keep-Alive的作用 作用:Keep-Alive:使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接.Web服务器,基 ...

  5. 后缀数组练习2:可重叠的k次最长重复子串

    其实和上一题是差不多的,只是在二分check的时候有一些小小的改动 1468: 后缀数组2:可重叠的k次最长重复子串 poj3261 时间限制: 1 Sec  内存限制: 128 MB提交: 113  ...

  6. composer设置autoload自己的代码

    "autoload": { "psr-4": {"": ["App/base", "App/src/contr ...

  7. 树莓派安装Firefox+Selenium+geckodriver

    相关参考博客[Selenium]Raspbian+Selenium+Firefoxfirefox.geckodriver.exe.selenium-server-standlone版本对应及下载地址树 ...

  8. 大数据学习(3)- redis集群

    安装方法摘自 http://www.redis.cn/topics/cluster-tutorial.html 这个方法为简单版的方法,在原文的基础上,我加了一点参数,其他参数配置可以请教其他大神 搭 ...

  9. 虚拟机centos7执行ip addr命令看不到ip地址

    转:https://blog.csdn.net/weixin_43343006/article/details/100094624 进入ect/sysconfig/network-scripts目录在 ...

  10. Java基础第二天--多态、接口

    多态 多态的概述 同一个对象,在不同时刻表现出来的不同形态 多态的前提和体现 有继承/实现关系 有方法重写关系 有父类引用指向子类对象 public class Animal { public voi ...