当你创建一个界面时,你是否基于行为来创建它,遵循可扩展的标准,例如
interface Comparable
interface Enumerable
interface Listable
interface Talkable
interface Thinkable
或者基于对象,例如
interface Comparator
interface Enumerator
interface List
interface Human
为什么?
更新
这个问题与命名约定(-able 后缀或 I- 前缀)无关。这是关于界面的设计意图及其影响,具体如下:-
- 灵 active
- 复杂/简单
- 可维护性
例如,如果我需要实现不同的功能,通过可行的方式,我可以将我的类声明为
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
的东西,无论它是 Man
、Woman
、鹦鹉
、机器人
等”
如果我不清楚,有关于这个主题的很好的资源。查看罗伯特·马丁的 Dependency Inversion Principle , Interface Segregation Principle ,和Liskov Substitution Principle适合初学者的文章。
关于oop - 为对象或 Action /行为创建界面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1382294/