【Single.class.php】
<?php /** * 单例模式 * 使某个类的实例仅允许创建一个 */ class Single { private static $ins; //保存对象的静态属性 //私有的构造方法,屏蔽了外部new操作 private function __construct() { } //禁止克隆 private function __clone() { } public static function getInstance() { if (!(self::$ins instanceof self)) { self::$ins = new self(); } return self::$ins; } public function output() { return "单例模式输出..."; } }
【Factory.class.php】
<?php /** * 工厂模式 * 使用工厂方法或者类生成对象,而不是在代码中直接new操作 */ class Factory { public static function getSingleOutput() { //Single类未使用单例模式之前可以如下调用 //$obj = new Single(); //Single类使用了单例模式之后,只能用下面的方法调用 //不管调用多少次,在Single类中都只会new一次 $obj = Single::getInstance(); $obj2 = Single::getInstance(); return '工厂模式--'.$obj->output(); } }
【调用】
////【工厂模式】 //如果需要调用Single类的output方法,现在只需要调用Factory::getSingleOutput即可 //假设 Single::output 方法的名称或参数要修改,只需要修改Factory::getSingleOutput即可 //其他各种地方调用 Factory::getSingleOutput 的代码都不需要修改 echo Factory::getSingleOutput() . '<br>';