1.单例模式:
单例模式是指在程序应用范围内只对,指定的类创建一个实例,也就是该模式包含的对象只有一个,就是单例本身。php使用的单例模式所设计的类通常应该满足如下要求:
- 单例模式通常拥有一个私有方法和私有克隆方法,这样可以确保用户无法通过创建对象或者克隆的方式对其进行实例化。
- 单例模式的类包含一个静态的用于保存当前类实例的成员变量以及一个静态方法,该静态方法负责对其本身进行实例化,然后将实例化后的对象保存到类中声明的静态变量中从而确保一个对象被创建。
php的单例模式的基本形式如下:
class Singleton {
private static $instance ; //保存当前类实例后的对象
public static function getInstance(){ //静态方法返回实例
if(null == self::$instance){ //如果未定义
self::$instance = new Db();
}
return self::$instance;
}
private function __construct(){
} //私有构造方法
private function __cole(){} //私有克隆方法
//类的其他方法
}
//获得类的对象
$singleton = Singleton::getInstance();
2.策略模式:
是指程序中涉及决策控制的一种模式,它通常定义一个抽象类,然后根据情况的不同创建不同的子类
实例如下:
Brower.php
abstract class Browser //定义抽象类Browser
{
abstract public function getType ();
}
class Ie extends Browser //定义IE类
{
public function getType () //获得类型方法
{
return 'IE';
}
}
class Fox extends Browser //定义火狐类
{
public function getType () //获得类型方法
{
return 'Firefox';
}
}
index.php
<?php
header('content-type:text/html; charset=utf-8');
require 'Browser.php';
function getBrowserType ()
{
if (strstr($_SERVER['HTTP_USER_AGENT'], "IE")) {
$b = new Ie();
} else {
$b = new Fox();
}
return $b->getType();
}
echo '当前浏览器是' . getBrowserType();
3.工厂模式:
工厂模式是指创建一个类似工厂的类,通过对类中成员方法的调用返回不同类型的对象
实例如下:
abstract class Father{ //定义基类
}
class Child1 extends Father{ //定义子类1
}
class Child2 extend Father{ //定义子类2
}
class Factory{ //创建工厂类
public function create(){ //创建对象
if($condition == 1){
return new Child1();
}else{
return new Child2();
}
}
}