设计模式简介

单例模式

单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例

关键字 : 三私一公

<?php

class DB {
    //静态变量保存全局实例
    private static $_instance = null;
    //私有构造函数,防止外界实例化对象
    private function __construct() {
        $this->conn();
    }
    //私有克隆函数,防止外界克隆对象
    private function __clone() {
    }
    //静态方法,单例统一访问入口
    static public function getInstance() {
        if (!(self::$_instance instanceof self)) {
            self::$_instance = new self ();
        }
        return self::$_instance;
    }
    public function conn() {
        //连接数据库
    }
}

桥接模式

将抽象部分与具体实现相分离

<?php

class Info{
    public $lev; //发送等级:普通,重要,特级
    public $target;//通过什么方式发送
    //实际发送方法
    public function Sending($to,$content){
        //先把消息等级确定了
        $content = $this->lev->msg($content);
        $target = $this->target->send($to);
        return $target.$content;
    }
}

//普通消息
class CommonInfo {
    public function msg($content){
        return '普通消息:' . $content;
    }
}

//重要消息
class ImportInfo {
    public function msg($content){
        return '重要消息:' . $content;
    }
}

//特别消息
class SpecialInfo {
    public function msg($content){
        return '特别消息:' . $content;
    }

}

//站内发送方式
class ZnSend {
    public function send($to){
        return '站内发给'. $to;
    }
}

//QQ发送方式
class QQSend {
    public function end($to){
        return 'QQ发给'. $to;
    }
}

//Email发送方式
class EmailSend {
    public function send($to){
        return '邮箱发给'. $to;
    }
}

$info = new Info();//实例化桥接类
$info->target = new ZnSend(); //实例化发送方式
$info->lev = new CommonInfo();//实例化消息等级
print_r($info->Sending('小明','回家吃饭'));//调用桥接类方法Sending,让ZnSend类和CommonInfo类结合
//output:站内发给小明普通消息:回家吃饭
View Code

组合模式

将对象以树形结构组织起来,以达成“部分-整体”的层次结构,使得客户端对单个对象和组合对象的使用具有一致性

外观模式

为子系统中的一组接口提供一个一致的界面, 外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用

原文地址:https://www.cnblogs.com/tanxing/p/6650522.html