设计模式三大基础模式之工厂模式,单例模式,注册树模式

工厂模式:

1.简单工厂模式
  1. 主要角色:抽象类、实现类、工厂类
  2. 具体实现 专门定义一个类来负责创建其它类的实例,被创建的实例通常都具有共同的父类。

    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");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值