데코레이터 패턴은 인터페이스를 바꾸지 않고 책임(기능)만 추가하여 확장하는 패턴이다.
대표적인 예제로는 Reader와 BufferedReader가 있다.
BufferedReader는 Reader 유틸에 버퍼의 기능을 확장한 것이다.
우리는 글자를 꾸미는 예제를 만들어보자.
public interface Print {
String print();
}public class OriginPrint implements Print {
@Override
public String print() {
return "design pattern";
}
}Print 인터페이스를 상속받아 design pattern을 출력하는 print()함수를 만들었다.
public class StarPrint implements Print {
private String decoStr = "**";
public StarPrint(Print print) {
this.decoStr = decoStr + print.print() + decoStr;
}
@Override
public String print() {
return decoStr;
}
}public class DallorPrint implements Print {
private String decoStr = "$$";
public DallorPrint(Print print) {
this.decoStr = decoStr + print.print() + decoStr;
}
@Override
public String print() {
return decoStr;
}
}design pattern텍스트를 꾸며줄 StarPrint와 DallorPrint를 만들었다.
public class DecoratorTest {
Print originPrint;
@Before
public void setUp() {
originPrint = new OriginPrint();
}
@Test
public void test() {
Print print = new StarPrint(new DallorPrint(originPrint));
System.out.println(print.print());
}
}테스트를 위해 OriginPrint를 DallorPirnt에 주입하여 기능을 확장하였고 그 이후에 StarPrint에 주입하여 기능을 한번더 확장하였습니다.
출력값은 다음과 같습니다
**$$design pattern$$**decorator 패턴과 adapter 패턴 차이
'Foundation > Design Pattern' 카테고리의 다른 글
| Command Pattern (0) | 2019.11.02 |
|---|---|
| Adapter 패턴과 Decorator 패턴의 차이 (0) | 2019.10.27 |
| Adapter 패턴 (0) | 2019.10.27 |
| Facade Pattern (0) | 2019.10.19 |