oop - 为对象或 Action /行为创建界面?

标签 oop architecture interface naming

当你创建一个界面时,你是否基于行为来创建它,遵循可扩展的标准,例如

interface Comparable
interface Enumerable
interface Listable
interface Talkable
interface Thinkable

或者基于对象,例如

interface Comparator
interface Enumerator
interface List
interface Human

为什么?

更新

这个问题与命名约定(-able 后缀或 I- 前缀)无关。这是关于界面的设计意图及其影响,具体如下:-

  1. 灵 active
  2. 复杂/简单
  3. 可维护性

例如,如果我需要实现不同的功能,通过可行的方式,我可以将我的类声明为

public class Man implements Talkable, Thinkable, Laughable
public class Woman implements Talkable, Thinkable, Laughable

另一方面,如果我们基于对象创建接口(interface),我们可以将其用作

public class Man implements Human
public class Woman implements Human

我们还可以将它用于多态性目的。

Human man = new Man();

最佳答案

接口(interface)与具体类的用途无关。它们更多地关注客户需要什么,以及可以替代客户需要的东西。例如,不要尝试从 Man 类中提取接口(interface),而是关注使用 Man 类的类之一。它有什么作用?也许它是一个想要让事物相互交谈的 Conversation 类。如果您给它两个 Man 类,它可以对它们调用 talk() 。但如果您希望它更加灵活,您可以抽象出它的功能概念 - 让事物说话,并让它使用 Talkable 接口(interface)(例如)。当您在这个 Conversation 类上看到 Talkable 接口(interface)时,您不应该认为“这真的是一个 Man”,而是“我在哪里看到 Talkable,我可以替换任何实现 Talkable 的东西,无论它是 ManWoman鹦鹉机器人等”

如果我不清楚,有关于这个主题的很好的资源。查看罗伯特·马丁的 Dependency Inversion Principle , Interface Segregation Principle ,和Liskov Substitution Principle适合初学者的文章。

关于oop - 为对象或 Action /行为创建界面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1382294/

相关文章:

c - 文件什么时候真正写入磁盘?

performance - Parallela FPGA-与 GPU 和昂贵的 FPGA 相比,64 核的性能如何?

c# - 测试驱动设计和分层架构

c - char 的符号是接口(interface)问题吗?

Python - 如何更改模块实现?

Promise.prototype.then 中的 Javascript 函数不执行

java - 为什么在Spring中使用服务实现模式

java - Java 有没有办法检查具体类是否实现具有相同完全限定名称的外部接口(interface)?

python - 为 "just one instance"创建一个 Python 类?

php - OOP 中网站的推荐好友功能