加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oop – 对象内的依赖关系

发布时间:2020-12-13 20:11:46 所属栏目:百科 来源:网络整理
导读:我有这个代码 class Duck { protected $strVocabulary; public function Learn() { $this-strVocabulary = 'quack'; } public function Quack() { echo $this-strVocabulary; }} 代码是用PHP编写的,但问题不依赖于PHP. 在它知道Quack之前,鸭子必须学习. 我的
我有这个代码
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还使用上面建立或未建立的网络连接示例.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读