一.单例
class Single
{
// 声明$instance为私有静态类型,用于保存当前类实例化后的对象
private static $instance = null;
public static function getInstance()
{
if(self::$instance == null) {
self::$instance = new self();
}
return self::$instance;
}
// 构造方法声明为私有方法,禁止外部程序使用new实例化,只能在内部new
private function __construct(){
echo 'Hello World';
}
// 声明成私有方法,禁止克隆对象
private function __clone(){}
// 声明成私有方法,禁止重建对象
private function __wakeup(){}
}
Single::getInstance();
二.工厂
interface Vehicle
{
public function drive();
}
class Car implements Vehicle
{
public function drive()
{
echo '汽车在路上跑'."<br/>";
}
}
class Ship implements Vehicle
{
public function drive()
{
echo '轮船在水里游'."<br/>";
}
}
class Airplane implements Vehicle
{
public function drive()
{
echo '飞机在天上飞'."<br/>";
}
}
class VehicleFactory
{
public static function build($className = null)
{
$className = ucfirst($className);
if ($className && class_exists($className)) {
return new $className();
}
return null;
}
}
VehicleFactory::build('Car')->drive();
VehicleFactory::build('Ship')->drive();
VehicleFactory::build('Airplane')->drive();
三.抽象工厂
/**
* 水果类工厂
*/
abstract class FruitFactory
{
abstract public function createFruit();//生产水果方法
}
/******具体工厂******/
//苹果工厂
class AppleFactory extends FruitFactory
{
public function createFruit()
{
return new Apple();
}
}
//香蕉工厂
class BananaFactory extends FruitFactory
{
public function createFruit()
{
return new Banana();
}
}
/******抽象产品******/
/*水果类产品*/
abstract class Fruit
{
abstract public function name();//水果名
}
/******具体产品******/
/*苹果*/
class Apple extends Fruit
{
public function name()
{
echo 'i am apple';
}
}
/*香蕉*/
class Banana extends Apple
{
public function name()
{
echo 'i am banana';
}
}
//苹果工厂
$appleFactory = new AppleFactory();
//造一个苹果
$apple = $appleFactory->createFruit();
$apple->name();//输出i am apple
//香蕉厂
$bananaFactory = new BananaFactory();
$banana = $bananaFactory->createFruit();
$banana->name();//输出 i am banana