java Decorator pattern 실습해보기
오늘은 decorator 패턴에 대하여 직접 실습해보자 합니다.
주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴이라고 합니다.
간단히 말해보면 객체에 또 다른 객체를 붙일 수 있습니다.
코드
public interface Linux {
public void getVersion();
}
우선 버전을 나타내는 메소드를 인터페이스로 만들어 둡니다.
public class Ubuntu implements Linux {
@Override
public void getVersion() {
System.out.println("Default version");
}
}
인터페이스를 상속받아서 추상 메소드를 구현합니다.
이 코드는 기본 버전을 의미합니다.
public abstract class Deco implements Linux {
Linux linux;
public Deco(Linux linux) {
this.linux = linux;
}
}
인터페이스를 또 상속받아서 추상 클래스인 데코레이터를 만듭니다.
그리고 생성자를 만들어 상위 클래스로 값을 넘깁니다.
public class NewVersionDeco extends Deco {
public NewVersionDeco(Linux linux) {
super(linux);
// TODO Auto-generated constructor stub
}
@Override
public void getVersion() {
System.out.println("NEW version");
}
}
데코레이터 추상 클래스를 상속받아서 데코 클래스를 만듭니다.
생성자를 만들어주고, super로 넘깁니다.
오버라이드도 잊지 않습니다.
public class Main {
public static void main(String[] args) {
Linux test1 = new Ubuntu();
test1.getVersion();
Linux test2 = new NewVersionDeco(new Ubuntu());
test2.getVersion();
}
}
메인 클래스에서는 비교를 위해서 (데코레이터를 적용안한) 기본 클래스랑 데코가 적용된 클래스를 각각 선언하고 출력 메소드를 작성합니다.
Written on February 11, 2018