工厂:使用工厂类的静态方法新建需要的对象 然后在外面直接调用静态方法新建对象

<?php//要创建对象实例的类
class MyObject{}
//工厂类
class MyFactory{public static function factory(){return new MyObject();}
}$instance=MyFactory::factory();
// D:\phpstudy\PHPTutorial\WWW\phpCollection\PHPDesignPattern\1.工厂.php:17:
// object(MyObject)[1]
var_dump($instance);

单例:保证一个类只生成一个对象实例 三私一公

<?phpclass Single
{private static $obj;private function __construct(){}private function __clone(){}public static function getSingle(){if(self::$obj instanceof self){return self::$obj;}else{self::$obj = new self();return self::$obj;}}
}// D:\phpstudy\PHPTutorial\WWW\phpCollection\PHPDesignPattern\2.单例.php:29:
// object(Single)[1]
$obj = Single::getSingle();
var_dump($obj);

注册树:使用静态变量数组进行存取对象

<?phpclass Obj{public static function newObj(){return new self();}
}class Register
{public static $tree;public static function set($alias,$obj){return self::$tree[$alias] = $obj;}public static function get($alias){return self::$tree[$alias];}
}
// D:\phpstudy\PHPTutorial\WWW\phpCollection\PHPDesignPattern\3.注册树.php:25:
// object(Obj)[1]
// D:\phpstudy\PHPTutorial\WWW\phpCollection\PHPDesignPattern\3.注册树.php:28:
// object(Obj)[1]$set = Register::set('rand',Obj::newObj());
var_dump($set);$get = Register::get('rand');
var_dump($get);

适配器:三个概念 主体 受体 适配器

受体想要使用主体  但是没法连接起来,就抽离出来一个适配器,

适配器可以获取定义主体的方法,受体可以从适配器获取主体的信息方法,从容达到了间接连接;

主体使用interface进行定义 ;

适配器inplements主体,重新定义主体声明但没有描述的方法;

受体:受体赋值在适配器中的静态变量中,受体就可以使用适配器的所有额方法了

我们通过调用适配器的方法 就可以使用受体的方法属性,也可以使用适配器的方法属性

其实也就是你家墙上有一个两口的插座(Adaptee),但你买了一个电风扇(Target)需要三个口的,这个时候
你就需要一个插排(Adapter)。适配器模式(Adapter)模式:将一个类的接口,转换成客户期望的另一个类的接口。适配器让原本接口不兼容
的类可以合作无间。我们直接可以在适配器中进行丰富方法
从而
方法与受体有重叠  可以使用受体的方法
受体没有的方法  我们可以在适配器中进行丰富!
这样就可以减少主体的改动!全部在受体与适配器中进行丰富方法!
<?php/*** 目标角色*/
interface Target
{/*** 源类也有的方法1*/public function sampleMethod1();/*** 源类没有的方法2*/public function sampleMethod2();
}/*** 源角色*/
class Adaptee
{/*** 源类含有的方法*/public function sampleMethod1(){echo 'Adaptee sampleMethod1 <br />';}
}/*** 类适配器角色* 在适配器里面进行丰富主体定义的方法*/
class Adapter implements Target
{private $_adaptee;public function __construct(Adaptee $adaptee){$this->_adaptee = $adaptee;}/*** 委派调用Adaptee的sampleMethod1方法*/public function sampleMethod1(){$this->_adaptee->sampleMethod1();}/*** 源类中没有sampleMethod2方法,在此补充*/public function sampleMethod2(){echo 'Adapter sampleMethod2 <br />';}}$adaptee = new Adaptee();
$adapter = new Adapter($adaptee);
$one = $adapter->sampleMethod1();
var_dump($one);
$two = $adapter->sampleMethod2();
var_dump($two);// Adaptee sampleMethod1
// D:\phpstudy\PHPTutorial\WWW\phpCollection\PHPDesignPattern\4.适配器.php:70:null
// Adapter sampleMethod2
// D:\phpstudy\PHPTutorial\WWW\phpCollection\PHPDesignPattern\4.适配器.php:72:null

https://www.cnblogs.com/DeanChopper/category/722751.html

https://www.cnblogs.com/moxiaoan/p/6230018.html

PHP设计模式:工厂(静态方法里调用newobj的方法)单例(三私一公newself)注册树(使用静态变量数组存取对象)适配器(主体建立接口适配器丰富方法)相关推荐

  1. 【深入设计模式】单例模式—从源码分析内部类单例、枚举单例以及单例模式在框架中的应用

    文章目录 1. 使用静态内部类实现单例模式 1.1 静态内部类单例写法 1.2 如何实现懒加载 1.3 为什么线程安全 2. 枚举类型单例单例模式 2.1 枚举类型单例写法 2.2 枚举类型单例原理 ...

  2. ArcGIS里表示地理信息的动态变化(例三)

    发信人: WickerPark ([淮水安澜]我已回家), 信区: GIS. 本篇人气: 25 标  题: ArcGIS里表示地理信息的动态变化(例三) 发信站: 南京大学小百合站 (Sat Aug ...

  3. 单例设计模式java,浅谈Java编程中的单例设计模式

    写软件的时候经常需要用到打印日志功能,可以帮助你调试和定位问题,项目上线后还可以帮助你分析数据.但是Java原生带有的System.out.println()方法却很少在真正的项目开发中使用,甚至像f ...

  4. week_06_动态代理,工厂方法,单例,File,IO,网络编程,反射,数据库语句

    动态代理 动态代理核心思想: 再程序执行过程中通过一些特殊的方式产生代理 jdk动态代理: 前提必须有一个接口 java.lang.reflect.Proxy:提供了创建动态代理类和实例的静态方法 p ...

  5. 【设计模式】原型模式 ( 浅拷贝 | 深拷贝 | 原型与单例冲突 | 禁用 final )

    文章目录 I . 原型模式 总结 II . 原型模式 浅拷贝 III . 原型模式 深拷贝 IV . 原型模式 与 单例 V . 原型模式 中的 final 关键字 ( 禁止出现 ) I . 原型模式 ...

  6. 结合Spring源码学习单例设计模式

    之前我学习了 Spring Ioc,明白了 Spring IoC 容器是一个管理Bean的容器,在Spring的定义中,它要求所有的IoC容器都需要实现接口 BeanFactory ,它是一个顶级容器 ...

  7. 设计模式-创建型模式(单例、简工、工方)

    1.单例模式 确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法.单例模式是一种对象创建模式. 1.1 饿汉式单例类 当类被加载时,静态变量inst ...

  8. Java中父类的静态变量和静态方法的继承问题

    1.普通父类的静态变量和方法,可以通过子类的名称访问和调用 2.普通父类的静态变量和方法,可以通过子类的实例对象访问和调用 3.抽象父类的静态变量和方法,可以通过具体子类的名称访问和调用 4.抽象父类 ...

  9. 【转载】:单例设计模式

    http://www.dofactory.com/Patterns/PatternSingleton.aspx http://www.cnblogs.com/xun126/archive/2011/0 ...

最新文章

  1. java 进程睡眠_Linux进程的睡眠和唤醒简析
  2. WEB前端--HTML
  3. 在SharePoint 2010中通过SQL数据源创建仪表板
  4. eclipse中YAML文件编辑插件:Yaml Editor插件安装
  5. CSS的三种定位,成功入职字节跳动
  6. jQuery.noop()方法
  7. [TJOI2015]弦论(后缀数组or后缀自动机)
  8. mtk 充电出错问题
  9. CNN手写汉字识别参数调整
  10. python求反余弦_python 反余弦
  11. Linux文件颜色所代表的含义
  12. 【时间与空间】基本概念
  13. redis之十五(游标迭代器(过滤器)——Scan)
  14. 解析国内冷链物流的发展现状
  15. Datawhale | 高级算法梳理第六期 Task3【XGB算法梳理】3天
  16. 那些移动端web踩过的坑2
  17. 浏览器缓存有哪些,通常缓存有哪几种
  18. 什么是分布式事务(CAP原则、BASE理论、2PC|3PC协议、XA|AT等模式)
  19. sd和sem啥区别_sd和sem的区别 sem测试主要测什么
  20. Java获取12306余票信息(一)

热门文章

  1. Gulp构建前端自动化工作流
  2. 8.Boost之unordered_set
  3. 记事本中写c/c++程序在Windows下执行
  4. Linux 查看CPU,内存,硬盘
  5. Android中访问通讯录,数据的增删改查
  6. Mysql8 InnoDB Cluster Shell Router HA配置图解
  7. python定义方法继承类_Python类的定义、继承及类对象使用方法简明教程
  8. 怎么调整字段长短_木北造型:空气刘海卷发筒怎么用 木北造型告诉您
  9. 错误fatal error: zlib.h: 没有那个文件或目录的解决办法
  10. OpenCV中图像垂直拼接函数vconcat的使用