This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| design_pattern:decorator_pattern [2017/10/30 15:17] – ledyx | design_pattern:decorator_pattern [2022/06/14 16:59] (current) – [Decorator Pattern] ledyx | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| = Decorator Pattern = | = Decorator Pattern = | ||
| - | 장식과 내용물을 동일시해서 장식을 여러 겹 중복되게 하기. (예를 들어 케이크에 초콜릿으로 코팅하면 초콜릿 케이크, 생크림으로 코팅하면 생크림 케이크) | + | 장식과 내용물을 동일시해서 장식을 여러 겹 중복되게 하기. 투과적인 인터페이스(API)를 갖는다. (예를 들어 케이크에 초콜릿으로 코팅하면 초콜릿 케이크, 생크림으로 코팅하면 생크림 케이크) |
| * 장식이 되는 기능을 하나씩 추가하면서 좀 더 목적에 맞는 객체 만들기 | * 장식이 되는 기능을 하나씩 추가하면서 좀 더 목적에 맞는 객체 만들기 | ||
| + | * 기능 확장이 필요할 때 서브클래싱 대신 쓸 수 있는 유연한 대안 [(https:// | ||
| + | * [[Composite Pattern]]과 무엇이 다른가? | ||
| + | * " | ||
| + | * 예시 | ||
| + | <sxh java ; gutter: | ||
| + | BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(" | ||
| + | </ | ||
| - | {{tag> | + | {{tag> |
| = Component = | = Component = | ||
| Line 66: | Line 73: | ||
| === ConcreteDecorator === | === ConcreteDecorator === | ||
| + | |||
| + | <sxh java> | ||
| + | package decorator; | ||
| + | |||
| + | public class SideBorder extends Border { | ||
| + | private char borderDecorator; | ||
| + | |||
| + | public SideBorder(Display display, char borderDecorator) { | ||
| + | super(display); | ||
| + | this.borderDecorator = borderDecorator; | ||
| + | } | ||
| + | |||
| + | @Override | ||
| + | public int getColumns() { | ||
| + | return display.getColumns() + 2; // 양쪽 장식물 길이 더한 값 | ||
| + | } | ||
| + | |||
| + | @Override | ||
| + | public int getRows() { | ||
| + | return display.getRows(); | ||
| + | } | ||
| + | |||
| + | @Override | ||
| + | public String getRowText(int row) { | ||
| + | StringBuilder sb = new StringBuilder(); | ||
| + | sb.append(borderDecorator); | ||
| + | sb.append(display.getRowText(row)); | ||
| + | sb.append(borderDecorator); | ||
| + | return sb.toString(); | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| <sxh java> | <sxh java> | ||
| package decorator; | package decorator; | ||
| Line 141: | Line 181: | ||
| } | } | ||
| } | } | ||
| + | |||
| + | |||
| + | /* | ||
| + | Hello world | ||
| + | #Hello world# | ||
| + | +-------------+ | ||
| + | |#Hello world#| | ||
| + | +-------------+ | ||
| + | |||
| + | / | ||
| + | / | ||
| + | / | ||
| + | /||*|Hello world|*||/ | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | */ | ||
| </ | </ | ||