在PHP中养成7个面向对象的好习惯
$this->country; } public function format($type) { if ($type == "inline") { $formatter = new InlineAddressFormatter(); } else if ($type == "multiline") { $formatter = new MultilineAddressFormatter(); } else { $formatter = new NullAddressFormatter(); } return $formatter->format($this->getAddressLine1(), $this->getAddressLine2(), $this->getCity (), $this->getState(), $this->getPostalCode(), $this->getCountry()); } } $addr = new Address (); $addr->setAddressLine1("123 Any St."); $addr->setAddressLine2("Ste 200"); $addr- >setCity("Anytown"); $addr->setState ("AY"); $addr->setPostalCode("55555- 0000"); $addr->setCountry("US"); echo ($addr->format("multiline")); echo ("\n"); echo($addr->format("inline")); echo("\n"); ?> 在 Address 对象上调用 format() 方法的代码可能看上去很棒 — 这段代码所做的是使用 Address 类,调用 format() 并完成。相反,Address 类就没那么幸运。它需要了解用于 正确格式化的各种格式化方法,这可能使 Address 对象无法被其他人很好地重 用,尤其是在其他人没有兴趣在 format() 方法中使用格式化方法类的情况下。 虽然使用 Address 的代码没有许多依赖关系,但是 Address 类却有大量代码, 而它可能只是一个简单的数据对象。 Address 类与知道如何格式化 Address 对象的实现类紧密耦合。 好习惯:在对象之间松散耦合 在构建优秀的 OO 设计时,必须考虑称为关注点分离(Separation of Concerns ,SoC)的概念。SoC 指尝试通过真正关注的内容分离对象,从而降低耦合度。 在最初的 Address 类中,它必须关注如何进行格式化。这可能不是优秀的设计 。然而,Address 类应当考虑 Address 的各部分,而某种格式化方法应当关注 如何正确格式化地址。 在清单 9 中,格式化地址的代码被移到接口、实 现类和工厂中 — 养成 “使用接口” 的习惯。现在, AddressFormatUtils 类负责创建格式化方法并格式化 Address。任何其他对象 现在都可以使用 Address 而不必担心要求获得格式化方法的定义。 清单 9. 在对象之间松散耦合的好习惯
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |