짧은 이야기 : 우체부는 집으로 돌아와서 전달할 주소가 적힌 표지 (문자, 서류, 수표, 기프트 카드, 신청서, 연애 편지)를받습니다.
표지가없고 우체국에 집으로 돌아와서 모든 물건을 받고 다른 사람들에게 배달하도록 요청한다고 가정하면 우체국은 혼란 스러울 수 있습니다.
그래서 커버로 감싸는 것이 좋습니다 (우리의 이야기에서는 인터페이스입니다). 그는 그의 일을 잘 할 것입니다.
우체부의 임무는 단지 표지 만 받고 전달하는 것입니다 (그는 표지 안에있는 것을 귀찮게하지 않을 것입니다).
interface
실제 유형이 아닌 유형을 작성 하지만 실제 유형으로 구현하십시오.
인터페이스를 만들려면 구성 요소가 나머지 코드에 쉽게 맞습니다.
예를 들어 보겠습니다.
아래와 같이 AirPlane 인터페이스가 있습니다.
interface Airplane{
parkPlane();
servicePlane();
}
Controller 클래스의 Plane에 메소드가 있다고 가정하십시오.
parkPlane(Airplane plane)
과
servicePlane(Airplane plane)
프로그램에서 구현됩니다. 코드가 중단 되지 않습니다 . 의미하는대로 인수를 허용하는 한 변경할 필요가 없습니다 AirPlane
.
그것은 실제의 형태에도 불구하고 어떤 비행기를 받아 들일 것입니다 때문에, flyer
, highflyr
, fighter
, 등
또한 컬렉션에서 :
List<Airplane> plane;
// 모든 비행기를 가져갑니다.
다음 예는 이해를 명확하게합니다.
당신은 그것을 구현하는 전투기가 있습니다.
public class Fighter implements Airplane {
public void parkPlane(){
// Specific implementations for fighter plane to park
}
public void servicePlane(){
// Specific implementatoins for fighter plane to service.
}
}
HighFlyer 및 기타 clasess에 대해서도 동일합니다.
public class HighFlyer implements Airplane {
public void parkPlane(){
// Specific implementations for HighFlyer plane to park
}
public void servicePlane(){
// specific implementatoins for HighFlyer plane to service.
}
}
이제 컨트롤러 클래스를 사용하여 AirPlane
여러 번 .
Controller 클래스가 아래와 같이 ControlPlane이라고 가정합니다.
public Class ControlPlane{
AirPlane plane;
// so much method with AirPlane reference are used here...
}
당신이 새로운 것을 만들 때 여기 마법이 온다 AirPlane
유형의 인스턴스를 원하는만큼 만들 수 있으며 ControlPlane
클래스 코드를 변경하지 않는 .
인스턴스를 추가 할 수 있습니다 ...
JumboJetPlane // implementing AirPlane interface.
AirBus // implementing AirPlane interface.
이전에 생성 된 유형의 인스턴스도 제거 할 수 있습니다.