λ°μ½λ μ΄ν° ν¨ν΄μ ꡬ쑰 ν¨ν΄ μ€ νλλ‘ νλ‘μλ₯Ό μ¬μ©νμ¬ λΆκ° κΈ°λ₯μ μννλ ν¨ν΄μ΄λ€.
// Component μΈν°νμ΄μ€
interface Component {
String operation();
}
// RealComponent ν΄λμ€
class RealComponent implements Component {
@Override
public String operation() {
return "String";
}
}
// Decorator μΈν°νμ΄μ€
interface Decorator extends Component {
}
// RealDecorator ν΄λμ€
class RealDecorator implements Decorator {
private Component component;
public RealDecorator(Component component) {
this.component = component;
}
@Override
public String operation() {
return "(((" + component.operation() + ")))";
}
}
// AnotherDecorator ν΄λμ€
class AnotherDecorator implements Decorator {
private Component component;
public AnotherDecorator(Component component) {
this.component = component;
}
@Override
public String operation() {
return "****" + component.operation() + "****";
}
}
// Client ν΄λμ€
public class Client {
private String decoratedString1;
private String decoratedString2;
private String decoratedString3;
public Client(Component realComponent) {
// 첫 λ²μ§Έ λ°μ½λ μ΄ν° μμ±
decoratedString1 = new RealDecorator(realComponent).operation();
// λ λ²μ§Έ λ°μ½λ μ΄ν° μμ±
decoratedString2 = new AnotherDecorator(realComponent).operation();
// μΈ λ²μ§Έ λ°μ½λ μ΄ν° μμ± (λ κ°μ λ°μ½λ μ΄ν°λ₯Ό μ‘°ν©)
decoratedString3 = new AnotherDecorator(new RealDecorator(realComponent)).operation();
}
public String getDecoratedString1() {
return this.decoratedString1;
}
public String getDecoratedString2() {
return this.decoratedString2;
}
public String getDecoratedString3() {
return this.decoratedString3;
}
}
// Main ν΄λμ€
public class Main {
public static void main(String[] args) {
// κΈ°λ³Έ κ°μ²΄ μμ±
Component realComponent = new RealComponent();
// Client κ°μ²΄ μμ±
Client client = new Client(realComponent);
// Clientλ₯Ό μ¬μ©νμ¬ λ©μλ νΈμΆ
System.out.println(client.getDecoratedString1());
System.out.println(client.getDecoratedString2());
System.out.println(client.getDecoratedString3());
}
}
// μΆλ ₯
// (((String)))
// ****String****
// ****(((String)))****
λ°μ½λ μ΄ν° ν¨ν΄μμ λ°μ½λ μ΄ν°μ μ€μ κ°μ²΄λ νλμ μΈν°νμ΄μ€λ₯Ό ꡬννλ€.
1. `RealComponent` ν΄λμ€λ `Component` μΈν°νμ΄μ€λ₯Ό ꡬννλ€.
2. `Decorator` μΈν°νμ΄μ€λ `Component` μΈν°νμ΄μ€λ₯Ό μμλ°λλ€.
3. `RealDecorator` ν΄λμ€μ `AnotherDecorator` ν΄λμ€λ `Decorator` μΈν°νμ΄μ€λ₯Ό ꡬννλ€.
μ μ½λλ₯Ό λ°μν μμ κ³μΈ΅λλ λ€μκ³Ό κ°λ€.
'CS > λμμΈ ν¨ν΄' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λμμΈ ν¨ν΄] μν(State) ν¨ν΄ (0) | 2024.01.17 |
---|---|
[λμμΈ ν¨ν΄] νλ‘μ(Proxy) ν¨ν΄ (0) | 2024.01.13 |
[λμμΈ ν¨ν΄] μ±κΈν€(Singleton) ν¨ν΄ (0) | 2024.01.10 |
[λμμΈ ν¨ν΄] ν©ν 리 λ©μλ(Factory Method) ν¨ν΄ (0) | 2024.01.10 |