工厂模式:
1.简单工厂模式
- 主要角色:抽象类、实现类、工厂类
具体实现 专门定义一个类来负责创建其它类的实例,被创建的实例通常都具有共同的父类。
abstract class Transportation { protected $name; public function moveWay(){ } } class Car extends Transportation{ protected $name="汽车"; public function moveWay(){ return $this->name."_滚动"; } } class Aircraft extends Transportation{ protected $name="飞机"; public function moveWay(){ return $this->name."_飞行"; } } class Factorry{ public static function createTran($id){ switch ($id) { case 1: return new Car(); break; case 2: return new Aircraft(); break; default: return "input error"; } } } echo Factorry::createTran(2)->moveWay();
单例模式
在一个项目中保持一个对象只存在一个实例,全局调用便利。例如:数据库操作对象、日志写入对象、全局配置解析对象等
<?php /** * Created by 马廷广 * User: 马廷广 * Date: 2015/7/30 * Time: 15:50 */ class singleton { private static $instance;//私有的静态变量来存储产生的对象实例 /* *构造方法,注意必须也是私有的,不允许被外部实例化(即在外部被new) */ private function __construct(){// echo __CLASS__."生成"; } /* *重载__clone方法,不允许对象实例被克隆 */ public function __clone(){ throw new Exception("Singleton Class Can Not Be Cloned"); } /* *类唯一实例的全局访问点,用于判断并返回对象实例,供外部调用 */ public static function getInstance(){ if(!self::$instance){ self::$instance=new self(); } return self::$instance; } /* *具体的业务方法,实际可以有很多方法,示例简略 */ public function hello(){ echo "Hello World"; } } $sin=singleton::getInstance(); $sin->hello();//输出:singleton生成 Hello World
注册树模式
注册模式就是将一些对象注册到全局树上面,那么可以被任何地方直接访问
<?php /** * Created by 马廷广 * User: 马廷广 * Date: 2015/7/30 * Time: 16:16 */ class Register{ protected static $objects; //将一个对象注册到全局的注册树上 static function _set($alias, $object){ //$alias:映射的名字 //当调用set方法时,将对象映射到注册树上 self::$objects[$alias] = $object; } //得到全局树上的对象 static function get($name){ return self::$objects[$name]; } function _unset($alias){ //调用unset方法时,表示把对象从树上移除 unset(self::$objects[$alias]); } }
class Aircraft {
protected $name="飞机";
public function moveWay(){
return $this->name."_飞行";
}
$aircraft=new Aircraft();//注册树模式的调用方法
Register::_set("aircraft",$aircraft);
echo Register::get("aircraft");