设计模式

单例模式

  • 只能被实例化一次,并且应用到整个项目中
class sign {
    // 声明一个静态属性,保证每次实现 sign 时,都是同一个对象
    protected static $ins = null;
    //封闭外部的 new 操作,由 getIns 方法实现
    public static function getIns()
    {
        if (self::$ins == null)
            self::$ins = new self();

        return self::$ins;
    }

    // 构造方法改为 protected,禁止 new 多个 sign 对象
    // final 关键字为了防止继承 sign 的类修改构造方法的权限 
    final protected function __construct(){}
    // 防止通过 clone 方法创建出两个对象
    final protected function __clone(){}
}

// 永远只能出现一个 sign 对象
$s1 = sign::getIns();

工厂方法模式

  • 子类重写接口/父类中的方法,解决不同的问题
// 公共的数据库连接接口
interface db {
    function conn();
}

interface Factory {
    function createDB();
}

class dbMysql implements db {
    public function coon()
    {
        echo '链接mysql';
    }
}
class mysqlFactory implements Factory {
    function createDB()
    {
        return new dbMysql();
    }
}

// 如果想要继续添加一种新的数据库连接,不需要更改之前的代码,只需要添加新的数据库属相类和工厂
class dboracle implements db {
    public function coon()
    {
        echo '链接mysql';
    }
}
class oracleFactory implements Factory {
    function createDB()
    {
        return new dboracle();
    }
}

$fact = new mysqlFactory();
$fact->createDB();

观察者模式

  • 被观察者发生变化时,观察者进行相应的改变
  • 被观察者实现attach()、detach()和notify()方法,观察者实现update()方法

策略模式

  • 和工厂模式类似

推荐阅读更多精彩内容