在现实世界中,人们用它来解决什么类型的问题?我可以看到这些协同工作的示例代码吗?我能找到的所有代码都是关于猫狗说话或喝牛奶或咖啡的人的代码...Java中的多态性和接口(可以使用多态性来实现接口......为什么?)
人们是否真的实现了接口的多态性?做什么的?
在现实世界中,人们用它来解决什么类型的问题?我可以看到这些协同工作的示例代码吗?我能找到的所有代码都是关于猫狗说话或喝牛奶或咖啡的人的代码...Java中的多态性和接口(可以使用多态性来实现接口......为什么?)
人们是否真的实现了接口的多态性?做什么的?
当然,
下面是“观察家报”的图案的具体例子,使用的类和接口来实现多态行为记录仪系统:
public static void main(String [] args){
Log myLog();
FileLogger myFile();
ConsoleLogger myConsole();
myLog.registerLogger(myFile);
myLog.registerLogger(myConsole);
myLog.log("Hello World!!");
myLog.log("Second log event!");
}
希望这有助于你的INTERF的理解:
interface ILogger{
public void handleEvent (String event);
}
class FileLogger implements ILogger{
public void handleEvent (String event){
//write to file
}
}
class ConsoleLogger implements ILogger{
public void handleEvent (String event){
System.out.println(event);
}
}
class Log {
public void registerLogger (ILogger logger){
listeners.add(logger);
}
public void log (String event){
foreach (ILogger logger in listeners){
logger.handleEvent(event); //pass the log string to both ConsoleLogger and FileLogger!
}
}
private ArrayList<ILogger> listeners;
}
然后,你可以按如下方式使用它ace和多态。
查看Map/AbstractMap/HashMap的代码为例。你会发现成千上万的其他例子,其中自带的JDK(在src.zip)的JDK源
Map<String,Person> peopleByName = new HashMap<String,Person>();
如果,在路上,我决定的HashMap的内存开销实在是太多了,我可以重新做到这一点作为一个TreeMap,并用稍贵查找时间
Map<String,Person> peopleByName = new TreeMap<String,Person>();
生活因为peopleByName是一个地图,而不是一个TreeMap或HashMap的,我所有的电话都保证无论是地图上的工作,无论执行。
这最好用下面的例子
public class CatsAndDogsDrinkingMilkAndCoffee {
// what, no? :-(
}
interface Request {
Response execute();
}
interface Response {
String serialize();
}
class RequestProcessor {
void processRequest(Request r) {
logger.log("Request: " + r);
Response s = r.execute();
logger.log("Response: " + s);
connectionManager.write(r.serialize());
}
}
说,在这个例子中所示,RequestProcesor并不需要知道请求和响应实现
想象“某人”设计了一个庞大的程序,有很多代码。假设“某人”在某些控制器逻辑的设计中使用了接口。现在你被聘用来处理你以前从未见过的代码。你被要求设计一个新的控制器类。你现在需要做的就是实现接口并使其所有方法都能正常工作。
如果有人没有使用接口,那么您不仅需要重新设计控制器,而且可能需要重新设计整个项目,因为控制器类和其他类之间存在非常强的耦合。这将花费你几个月的时间来理解代码,更不用说可能会引入的新的一组错误了。
几乎任何带有GUI的Java应用程序都使用它(但当然不仅仅是GUI ...)。例如,看看android VideoView源(这是第一次在我脑海...)
我对“真实世界”的另一个建议是使用spring批处理。如果您有一种常用的报告格式,例如“拉取数据,创建报告,发送给收件人”等模式,您可以为报告创建一个强制执行此标准的界面。从这个意义上说,它就像所有批量报告遵循的“模板”一样。
的镗例子,但它的东西,我在面对我的第一年......
你想知道如何LINQ在.net中的作品?这完全是关于接口和多态的。
你需要在项目上工作,然后你会了解所有这些。
要使用猫和狗的例子(叹气,我知道)... **不要以为把猫变成狗。**想想像对待任何其他动物一样对待猫。这样,如果有人决定给你一天狗,你可以做同样的事情,你会与猫。 “饲料(食物f)”。 '确保BathroomCapabilities()'。玩它(玩具t)'。不要对猫做一些你不能对狗做的事。 – corsiKa 2011-03-24 18:21:55
阅读维基百科的设计模式。它们非常有用,并且通常使用接口http://en.wikipedia.org/wiki/Design_pattern_(computer_science) – Kurru 2011-03-31 19:11:51