안녕하세요 부모 클래스가 Abstract Employee
이고 어린이가 있습니다 Secretary, Engineer, Technician
ArrayList<Employee> employees;
이 있고 for 루프에 임의로 직원 = 새로운 비서 또는 새로운 엔지니어가 있습니다.부모 클래스의 arraylist의 각 어린이 클래스를 구분합니다
누가 누군지 알 수있는 방법이 있습니까? 질문에 잘 대답하지 않으면 내 무지를 사과한다.
안녕하세요 부모 클래스가 Abstract Employee
이고 어린이가 있습니다 Secretary, Engineer, Technician
ArrayList<Employee> employees;
이 있고 for 루프에 임의로 직원 = 새로운 비서 또는 새로운 엔지니어가 있습니다.부모 클래스의 arraylist의 각 어린이 클래스를 구분합니다
누가 누군지 알 수있는 방법이 있습니까? 질문에 잘 대답하지 않으면 내 무지를 사과한다.
이상적으로는 신경 쓰지 말아야합니다. 특정 클래스에 따라 다른 작업을 수행해야하는 경우 Employee
의 (추상적 인) 메소드로 이동해야합니다.이 메소드는 하위 클래스가 다른 방식으로 재정의하고 구현합니다. 그런 다음 목록을 살펴보고 모든 요소에 대해 해당 메서드를 호출하면됩니다.
이것은 적절한 객체 지향 설계입니다.
각 직원이해야 할 일이 무엇이든간에. employee.work(). 각 직원은 호출자/루프 코드가 아니라 필요한 작업을 알고 있습니다. –
그래, 그게 내가 원하는 "O - O를 설계 적절한"나는 다른 사람들이 제안하는 것처럼 방문자 패턴으로 다이빙합니다 :) 감사합니다 Logged –
네이티브 연산자 instanceof
을 사용할 수 있습니다. 이 같은
뭔가 :
List<Employee> yourList;
for (Employee e : yourList) {
if (e instanceof Secretary) {
Secretary s = (Secretary)e;
// do something with s
} else if (e instanceof Engineer) {
Engineer eng = (Engineer)e;
// do something with eng
}
// you get the idea...
}
는 instanceof
의 사용을 남용하는 것은 항상 좋은 생각이 아니다,라고 말했다 가졌어요. 클래스에서 다형성을 사용하면보다 객체 지향적 인 솔루션을보다 깨끗하게 사용할 수 있습니다.
확실히 instanceof
을 사용할 수 있지만 디자인의 목적을 상실합니다. Employee의 다른 하위 유형을 추가 할 때마다 잠재적으로 많은 코드 (이 목록에서 작동하는 모든 장소)를 수정해야합니다.
변경 횟수를 줄이거 나 (적어도 관리 할 수있는 장소에 유지하는) 다른 방법은 방문자 패턴 또는 다형성을 사용하여 런타임에 유형에 따라 코드에서 취할 수 있도록하는 것입니다.
이와 같은 상황에서 visitor pattern을 구현하는 것이 좋습니다.
는 또한 완전한 예를 Lion
들과 Deer
의 확장 Animal
의 목록의 내용이 정확한 문제를 해결 over here보고 할 수 있습니다.
(비서가 엔지니어에게 전달되는 경우가 있습니다.) –