PHP 实现空对象模式 2019-01-24

在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。

在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方

abstract class AbstractCustomer

{

    protected $name;

    public abstract function isNil();

    public abstract function getName();

}


class CustomerFactory

{

    public static  $names = ["Rob", "Joe", "Julie"];

    public static function getCustomer($name)

{

        for ($i = 0; $i < sizeof(self::$names); $i++) {

            if (self::$names[$i] == ($name)){

                return new RealCustomer($name);

}

}

            return new NullCustomer();

}

}


class NullCustomer extends AbstractCustomer

{

    public function getName()

{

        return "Not Available in Customer Database"."</br>";

}

    public function isNil()

{

          return true;

}

}


class RealCustomer extends AbstractCustomer

{

    public function __construct($name)

{

        $this->name = $name;

}

    public function getName()

{

        return $this->name;

}

    public function isNil()

{

          return false;

}

}



class NullPatternDemo

{

    public static function main()

{

        $customer1 = CustomerFactory::getCustomer("Rob");

        $customer2 = CustomerFactory::getCustomer("Bob");

        $customer3 = CustomerFactory::getCustomer("Julie");

        $customer4 = CustomerFactory::getCustomer("Laura");

        print_r("Customers:"."<br/>");

        print_r("Rob:".$customer1->getName()."<br/>");

        print_r("Bob:".$customer2->getName()."<br/>");

        print_r("Julie:".$customer3->getName()."<br/>");

        print_r("Laura:".$customer4->getName()."<br/>");

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 7,224评论 0 17
  • NLP有效沟通复盘 R和A发生了一些冲突,回顾过程,假如双方都能把NLP的工具好好用用,完全可以有不一样的解决方案...
    伊利诺伊秋天的红叶阅读 352评论 0 0
  • rediscover/ˌriːdɪˈskʌvər/ v. 重新找到;重新获得 e.g. 前缀:re- 表重复 be...
    95小神经阅读 590评论 0 0
  • 现在是2018.4.3,晚上11.49,记录今天的一天。 今日身体 今天身体略差,上课三节以后彻底嗓子废了,主要还...
    饭饭_bms阅读 200评论 0 0
  • 问题描述:实现一个函数,把字符串里的空格替换成%20,如'We are happy' 替换成 'We%20are%...
    小码弟阅读 129评论 0 0

友情链接更多精彩内容