카샤의 만개시기

Decorator 패턴 본문

Foundation/Design Pattern

Decorator 패턴

SKaSha 2019. 10. 27. 10:31

데코레이터 패턴은 인터페이스를 바꾸지 않고 책임(기능)만 추가하여 확장하는 패턴이다.

대표적인 예제로는 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 패턴 차이

https://skasha.tistory.com/68

'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
Comments