首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链接Java接口

链接Java接口
EN

Stack Overflow用户
提问于 2014-06-24 01:29:03
回答 2查看 788关注 0票数 0

好吧,我肯定我错过了一些非常非常简单的东西,但是我被困住了。

假设:

我有一个接口,我希望公开的人,以发展为对照。假设它是一个mp3播放器。我想让他们知道它能做什么,而不透露我是如何做到的。

所以我有:

代码语言:javascript
复制
public interface IPlayer()
    public void play()

那我就有了实现

代码语言:javascript
复制
public class MP3Player implements IPlayer
    public void play() {
       // my wonderful magical code here
    }

现在,使用我的界面播放这首歌的人会做一些类似的事情

代码语言:javascript
复制
IPlayer.play();

所以我的问题是,我该怎么做才能把这三个班联系在一起?我显然不想公开代码的第二部分,那么如何发布这个API并将其链接到我的代码呢?

任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-24 01:37:51

尽管对该类的实际实现一无所知(甚至它也不存在),但您的同事仍然需要访问实现您的接口的类的实例(即:MP3Player的实例).但只把它看作是一个IPlayer

因此,您需要为他提供一种方法来获得这样一个实例。我建议你做的是有两个包裹:

代码语言:javascript
复制
package: yourproject.api
 - contains: public interface IPlayer
             public class IPlayers
package: yourproject.impl
 - contains: public class MP3Player implements IPlayer

其中IPlayers将是一个工厂类,其中有一个方法:

代码语言:javascript
复制
public static IPlayer createIPlayer() {
    return new MP3Player();
}

您将只公开yourproject.api包:)

票数 2
EN

Stack Overflow用户

发布于 2014-06-24 01:32:07

代码语言:javascript
复制
IPlayer player = new MP3Player(); //or any other class that implements IPlayer
player.play();

它只是依赖于抽象而不是实现,所以如果将来某个时候需要使用不同的播放器,可以实例化实现IPlayer (多态性)的另一个播放器。

代码语言:javascript
复制
class DVDPlayer implements IPlayer {
    public void play(){
    }
}

如果您只需要创建Player对象,那么您可以实现工厂模式。(并使构造函数包可访问,以便只需在工厂内调用它们)

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24377024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档