현실 세계에서는 사람들이 (어떤 유형의 문제를 해결하기 위해) 이것을 사용합니까? 함께 작동하는 예제 코드를 볼 수 있습니까? 내가 찾을 수있는 것은 말하는 고양이와 개에 관한 코드 또는 우유 나 커피를 마시는 사람들에 관한 코드입니다 ...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;
}
, 당신은 그것을 사용할 수 에이스 및 다형성.
예제로 Map/AbstractMap/HashMap의 코드를 살펴보십시오. 길 아래에, 내가 HashMap에의 메모리 오버 헤드가 너무 많이 결정하면 당신은 (src.zip 단위) JDK와 함께 제공되는 JDK 소스의 다른 예 수천을 찾을 수
Map<String,Person> peopleByName = new HashMap<String,Person>();
, 나는 재 수 TreeMap과 같이이 작업을 수행하고, peopleByName는지도가 아닌 트리 맵 또는 HashMap에 있기 때문에 약간 더 비싼 조회 시간
Map<String,Person> peopleByName = new TreeMap<String,Person>();
살고, 내 모든 통화에 관계없이 구현 중 하나를지도에서 작동하도록 보장합니다.
이
가장 다음 예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이
이 상상할 요청 및 응답의 구현에 대해 알 필요가 없다 "누군가가"설계 거대한 프로그램, lotsa 코드. "그 누군가"가 일부 컨트롤러 논리의 설계에서 인터페이스를 사용한다고 가정 해보십시오. 이제는 전에 보지 못했던이 코드로 작업하기 위해 고용되었습니다. 새 컨트롤러 클래스를 설계하라는 메시지가 나타납니다. 지금해야 할 일은 인터페이스를 구현하고 모든 메소드를 작동시키는 것입니다.
누군가 인터페이스를 사용하지 않았다면 컨트롤러를 재 설계해야 할뿐만 아니라 컨트롤러 클래스와 나머지 클래스 간의 강력한 결합이있을 수 있으므로 잠재적으로 전체 프로젝트를 재 설계해야 할 것입니다 . 이 코드를 이해하기 위해 몇 달이 걸릴 것입니다. 아마도 새로운 버그 집합은 말할 것도 없습니다.
거의 모든 Java 응용 프로그램이 GUI를 사용합니다 (물론 GUI뿐 아니라 ...). 예를 들어, 다형성 달성하기 위해 클래스 및 인터페이스를 사용하여 다음
이의 "관찰자"패턴의 구체적인 예입니다 (...이 처음 내 마음에 온다) android VideoView의 소스에서 물론"실제 세계"에 대한 또 다른 제안은 스프링 배치를 사용하는 것입니다. "데이터 가져 오기, 보고서 만들기,받는 사람에게 보내기"와 같은 패턴을 따르는 일반적으로 사용되는 보고서 형식을 사용하는 경우이 표준을 적용하는 보고서 인터페이스를 만들 수 있습니다. 이 의미에서 모든 배치 보고서가 따르는 "템플릿"처럼 작동합니다.
지루한 예,하지만
가 어떻게 LINQ .NET 작품 궁금해 ... 나는 내 첫 해에 직면 뭔가? 그것은 모두 인터페이스와 다형성에 관한 것입니다.
프로젝트에 대한 작업이 필요하다면 모든 것에 대해 알게 될 것입니다.
고양이와 개 예제를 사용하려면 (한숨, 나도 알아) ... ** 고양이를 개로 바꾸는 것을 생각하지 마십시오. ** 다른 동물과 마찬가지로 고양이를 치료한다고 생각하십시오. 그런 식으로 누군가가 당신에게 개를 주기로 결정했다면, 고양이와 같은 일을 할 수 있습니다. '먹이 (음식 f)'그것. 'ensureBathroomCapabilities()'를 사용하십시오. '그것 (장난감 t)'을 가지고 놀아 라. 개에게 할 수없는 뭔가를 고양이에게하지 마십시오. – corsiKa
위키 피 디아의 디자인 패턴에 대해 읽어보십시오. 그들은 매우 유용하며 종종 인터페이스로 다형성을 사용합니다. http://en.wikipedia.org/wiki/Design_pattern_ (computer_science) – Kurru