套路

241 阅读1分钟
  • 单一职责
    • 一个类或一个方法只做一件事
  • 开放封闭
    • 对扩展开放对修改关闭
  • 里氏替换
    • 所有基类出现的地方都可以用派生类替换而不会使程序报错,子类可以扩展父类的功能但不能改变父类原有的功能
  • 接口隔离
    • 类不应该依赖不需要的接口知道的越少越好
  • 依赖倒置
    • 高级模块不应该依赖低级模块而是依赖抽象, 抽象不能依赖细节细节要依赖抽象,比如A内有类B对象称为A依赖类B但是不应该这么做而是选择类A去依赖抽象

单例模式

/**
 * 单例模式 : 	通过提供自身共享实例的访问 
 				单例设计模式用于限制特定对象只能被创建一次 
                单例模式可以减少类的实例化
                
 * 使用场景 : 	例如数据库实例
 */
function load($class_name, $type)
{

    $class_path = $this->get_class_path($class_name, $type);
    $class_name = $this->get_class_name($class_name);

    if (!file_exists($class_path)) {
        InitPHP::initError('file' . $class_name . '.php is not exist!');
    }

    if (isset(self::$instance['initphp'][$class_name])) {
        return self::$instance['initphp'][$class_name];
    }

    require_once($class_path);

    if (!class_exists($class_name)) {
        InitPHP::initError('class' . $class_name . ' is not exist!');
    }

    self::$instance['initphp'][$class_name] = new $class_name;

    return self::$instance['initphp'][$class_name];
}

观察者模式

/**
 * 观察者设计模式 : 能够更便利创建和查看目标对象状态的对象
 				   并且提供和核心对象非耦合的置顶功能性。
 				   在一般复杂的 WEB 系统中,观察者模式可以帮你减轻代码设计的压力,
                   降低代码耦合
 
 * 常用场景 :   设计一个订单类 订单创建完成后,会做各种动作,比如发送 EMAIL,
 				或者改变订单状态等等 原始的方法,是将这些操作都写在 create 函数里面
 *             但是随着订单创建类的越来越庞大,这样的操作已经无法满足需求和快速变动
 */
class order
{
    // 存放观察容器
    protected $observers = array();

    // 新增观察者
    public function addObserver($type, $observer)
    {
        $this->observers[$type][] = $observer;
    }

    // 运行观察者
    public function observer($type)
    {
        if (isset($this->observers[$type])) {
            foreach ($this->observers[$type] as $obser) {
                $a = new $obser;
                $a->update($this);
            }
        }
    }

    public function create()
    {
        echo '购买成功';
        $this->observer('buy');
    }
}

class orderEmail
{
    public static function update($order)
    {
        echo '发送一个邮件';
    }
}

class orderStatus
{
    public static function update($order)
    {
        echo '改变状态';
    }
}

$ob = new order();
$ob->addObServer('buy', 'orderEmail');
$ob->addObServer('buy', 'orderStatus');
$ob->create();

解释器模式

/**
 * 解释器模式 : 用于分析一个实体的关键元素,并且针对每个元素提供自己的解释或相应动作
 *
 * 常用场景 : PHP 的模板引擎 
 */
class template
{
    private $left = '<!--{';

    private $right = '}--!>';

    public function run($str)
    {
        return $this->init($str, $this->left, $this->right);
    }

    private function init($str, $left, $right)
    {
        $pattern = array('/' . $left . '/', '/' . $right . '/');

        $replacement = array('', '');

        return preg_replace($pattern, $replacement, $str);
    }
}