<?php
/**
 * Link         :   http://www.phpcorner.net
 * User         :   qingbing<780042175@qq.com>
 * Date         :   2018-10-27
 * Version      :   1.0
 */

namespace Abstracts;

/**
 * Class Factory
 * @package Helper
 */
abstract class Factory extends Base
{
    /**
     * 获取实例
     * @return $this
     */
    final  public static function getInstance()
    {
        $className = get_called_class();
        $instance = new $className();
        /* @var Factory $instance */
        $instance->init();
        return $instance;
    }

    /**
     * 私有构造器
     */
    final private function __construct()
    {
    }

    /**
     * 工厂模式初始化函数，在构造函数后执行，子类可以覆盖
     */
    protected function init()
    {
    }
}