Interface 如何强制程序员实现接口

Interface 如何强制程序员实现接口,interface,Interface,我制作了一个界面,包含了玩家应该拥有的所有常用方法。我在代码中实现了它,我的同事也是。但是许多不了解我的界面的开发人员创建了自己的方法,如playMyPlayer()等 我怎样才能强迫其他程序员实现我的接口?你自己确定了这里的主要问题,不是这些开发人员选择不使用你的接口,而是他们不知道它的存在 我认为这里的主要任务是实现一个系统,告知开发人员他们可以访问哪些代码,以及一个wiki或其他知识库,在那里他们可以搜索他们需要的内容 一旦你有了一个系统来通知你的开发人员什么样的接口/代码样本/他们可以使

我制作了一个界面,包含了玩家应该拥有的所有常用方法。我在代码中实现了它,我的同事也是。但是许多不了解我的界面的开发人员创建了自己的方法,如playMyPlayer()等


我怎样才能强迫其他程序员实现我的接口?

你自己确定了这里的主要问题,不是这些开发人员选择不使用你的接口,而是他们不知道它的存在

我认为这里的主要任务是实现一个系统,告知开发人员他们可以访问哪些代码,以及一个wiki或其他知识库,在那里他们可以搜索他们需要的内容

一旦你有了一个系统来通知你的开发人员什么样的接口/代码样本/他们可以使用的任何东西,那么确保他们使用它就会容易得多。平心而论,如果您提供的代码编写得很好,并且支持他们需要的功能,那么大多数开发人员无论如何都会使用它,因为这样可以节省他们的工作


但是,您应该在您的编码标准/行为准则中加入一些关于重用现有代码而不是重写的内容,但在您有一个坚实的系统来通知开发人员哪些代码可供他们使用之前,您不能这样做。

唯一的方法是创建一个需要对象实例的有用类实现您的界面:

public class UsefulClass {
    public void DoSomethingIrresistable(IPlayer player) { 
        // ... implementation here
    }
}
任何想要这些好东西的人都必须找到或创建一个实现
IPlayer
的类


否则,为什么会有人首先实现接口?您创建接口是为了保证某些类成员的存在,而不是为了强迫人们按照您认为应该设计的方式组织他们的类。

用您自己的场景解释:

接口

interface Player{
    public void play();
    public void pause();
    public void stop();
}
实现
Player
Intreface的类

class AudioPlayer implements Player{...}

class VideoPlayer implements Player{...}
一些额外的课程。毫无意义但似乎相关

Class PlayList{}
发挥重要作用的enum

enum MEDIAPLAYER {
    AUDIO,VIDEO;

    public Player getPlayer() {
        switch (this) {
            case AUDIO:
                return new AudioPlayer();
            case VIDEO:
                return new VideoPlayer();
            default:
                return new AudioPlayer();
        }
    }
}
使用您的代码

Player testPlayer = MEDIAPLAYER.getPlayer();
:
testPlayer.play();
现在,如果添加了任何新的播放器,其条目将转到
MEDIAPLAYER
,它将返回
player
类型对象。所以每个人都必须实现
Player

另一种方法


您可以创建一个抽象类,比如说
MasterPlayer
,它拥有
Player
接口拥有的所有抽象方法。此外,
MasterPlayer
将有一些额外的方法,如管理
播放列表

与他们交谈?如果他们不使用你的界面的唯一原因是因为他们不知道它在那里,那么没有必要强迫他们。。。。。。如果你不得不强迫他们,你会遇到比在使用哪种接口上意见分歧更大的问题。如果你有一些方法采用这种接口类型的参数,他们怎么不实现它呢。他们怎么能让它工作呢?嗯!!我在寻找一些技术解决方案。我找到了一些方法,比如创建只接受接口类型对象的方法,在这种情况下,程序员会意识到接口,并在他的类中实现该接口。但不知道在哪里适合那个类…如果你还没有只接受那个接口的方法-这样就可以使用那个接口-你为什么还要强迫他们使用它呢?这和我在上面评论的想法是一样的。当我们不让其他人更改重要方法的名称时,这是必需的,这样将来我就可以在不做额外更改的情况下使用反射调用这些方法的功能。建议你多想想办法谢谢!这正是我想要的。。。。谢谢。这是某种设计模式还是仅仅是针对特定问题的解决方案?根据您的第二种方法,我可以将播放器接口转换为MasterPlayer抽象类。这样做有什么好处吗?哪种方法更好?对于第二种情况,您可以简单地使用
Player
引用所有类型的播放器,例如
VideoPlayer
AudioPlayer
,但是调用任何抽象/虚拟成员都将调用真实类的成员。对于一个游戏,你可以做一个基类
GameObject
——然后把所有类型的游戏对象放到一个列表中并在上面迭代,以更新所有游戏对象,而不需要任何开关语句或任何东西。