设计模式4.1-工厂模式之简单工厂

<?php

/*
*
*
*
* 简单工厂模式:创建对象的逻辑抽取出来,放到工厂中实现
*
* 在本示例中:客户类Test获取对象实例door的代码放到工厂类Factory中实现。
* 带来的好处是,在我们需要添加door的类型时,不必更改Test类的代码,只需要在factory中添加即可。
*
*/
//对象类
abstract class Door
{
    abstract public function open();
    abstract public function close();
}

class WhiteDoor extends Door
{
    public function open()
    {
        echo "White Door Open!<br>\n";
    }

    public function close()
    {
        echo "White Door Close!<br>\n";
    }
}
class BlackDoor extends Door
{
    public function open()
    {
        echo "Black Door Open!<br>\n";
    }

    public function close()
    {
        echo "Black Door Close!<br>\n";
    }
}

class NilDoor extends Door
{
    public function open()
    {}

    public function close()
    {}
}


class SimpleFactory
{
    public function create($config = [])
    {
        $object = null;

        if (is_array($config) && !empty($config)) {
            $className = array_shift($config).'Door';
            $object = new $className($config);
        } else {
            $object = new NilDoor();
        }
        return $object;
    }
}

class Test
{
    public function run()
    {
        $factory = new SimpleFactory();

        $doorOne = $factory->create(['Black']);
        $doorTwo = $factory->create(['White']);

        $doorOne->open();
        $doorOne->close();

        $doorTwo->open();
        $doorTwo->close();
    }
}

$test = new Test();
$test->run();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值