我有这个代码
class Duck { protected $strVocabulary; public function Learn() { $this->strVocabulary = 'quack'; } public function Quack() { echo $this->strVocabulary; } }
代码是用PHP编写的,但问题不依赖于PHP.
在它知道Quack之前,鸭子必须学习.
我的问题是:如何在调用Learn()之后才能调用Quack()?
不,这不违反任何OOP原则.
一个突出的例子是一个对象,其行为取决于是否建立了连接(例如,函数doNetworkStuff()取决于openConnection()).
在Java中,甚至有一个typestate checker,它在编译时执行这样的检查(Duck是否已经是Quack()).我经常有这样的依赖作为接口的前提条件,并使用转发类,其唯一目的是协议并检查它转发到的对象的状态,即协议在对象上调用了哪些函数,并抛出异常(例如InvalidStateException)不符合先决条件.
处理此问题的设计模式是state:它允许对象在其内部状态更改时更改其行为.该对象似乎会更改其类. design pattern book from the Gang of Four还使用上面建立或未建立的网络连接示例.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。