好吧,我肯定我错过了一些非常非常简单的东西,但是我被困住了。
假设:
我有一个接口,我希望公开的人,以发展为对照。假设它是一个mp3播放器。我想让他们知道它能做什么,而不透露我是如何做到的。
所以我有:
public interface IPlayer()
public void play()那我就有了实现
public class MP3Player implements IPlayer
public void play() {
// my wonderful magical code here
}现在,使用我的界面播放这首歌的人会做一些类似的事情
IPlayer.play();所以我的问题是,我该怎么做才能把这三个班联系在一起?我显然不想公开代码的第二部分,那么如何发布这个API并将其链接到我的代码呢?
任何帮助都是非常感谢的。
发布于 2014-06-24 01:37:51
尽管对该类的实际实现一无所知(甚至它也不存在),但您的同事仍然需要访问实现您的接口的类的实例(即:MP3Player的实例).但只把它看作是一个IPlayer。
因此,您需要为他提供一种方法来获得这样一个实例。我建议你做的是有两个包裹:
package: yourproject.api
- contains: public interface IPlayer
public class IPlayers
package: yourproject.impl
- contains: public class MP3Player implements IPlayer其中IPlayers将是一个工厂类,其中有一个方法:
public static IPlayer createIPlayer() {
return new MP3Player();
}您将只公开yourproject.api包:)
发布于 2014-06-24 01:32:07
IPlayer player = new MP3Player(); //or any other class that implements IPlayer
player.play();它只是依赖于抽象而不是实现,所以如果将来某个时候需要使用不同的播放器,可以实例化实现IPlayer (多态性)的另一个播放器。
class DVDPlayer implements IPlayer {
public void play(){
}
}如果您只需要创建Player对象,那么您可以实现工厂模式。(并使构造函数包可访问,以便只需在工厂内调用它们)
https://stackoverflow.com/questions/24377024
复制相似问题