- 사람이 반려견과 함께 산책할 수 있는 클래스다이어그램이다. 우선 모든 Animal은 사람과 함께 산책할 수 있다. 사람은 혼자 산책하거나 고양이와 개와 함께 산책 할 수 있다.
public interface Animal {
public void walk();
}
public class Cat implements Animal{
@Override
public void walk() {
System.out.println("고양이와 산책하다");
}
}
public class Dog implements Animal{
@Override
public void walk() {
System.out.println("개와 산책하다.");
}
}
public class Person {
//공통 접근
private Animal animal;
//동물 변경
public void setAnimal(Animal animal) {
this.animal = animal;
}
public void walk(){
if(animal==null){
System.out.println("혼자 걷다.");
}else{
//델리게이트
animal.walk();
}
}
}
public class Main {
public static void main(String[] args) {
Person person=new Person();
person.walk();
person.setAnimal(new Dog());
person.walk();
person.setAnimal(new Cat());
person.walk();
}
}
- 만약 사람에게 함께 산책할 수 있는 다람쥐라는 동물이 추가 되었다고 했을 경우에 Person객체는 변화가 없다.
public class Squirrel implements Animal{
@Override
public void walk() {
System.out.println("다람쥐와 산책하다.");
}
}
public class Main {
public static void main(String[] args) {
Person person=new Person();
person.walk();
person.setAnimal(new Dog());
person.walk();
person.setAnimal(new Cat());
person.walk();
//추가
person.setAnimal(new Squirrel());
person.walk();
}
}
- Person객체의 walk()라는 함수에 기능을 위임하여 느슨한 결합으로 변경 및 추가시 변경이 용이하다.