oop – 对象内的依赖关系

前端之家收集整理的这篇文章主要介绍了oop – 对象内的依赖关系前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这个代码
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还使用上面建立或未建立的网络连接示例.

猜你在找的设计模式相关文章