PHP设计模式

winterSky 2018-09-14 PM 1075℃ 0条

一.单例


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
标签: none

非特殊说明,本博所有文章均为博主原创。

评论啦~