-
[Java] λμμΈ ν¨ν΄(Decorator ν¨ν΄)Android/Java 2021. 1. 8. 11:14λ°μν
- μ΄ κΈμ "μΈνλ° Java λμμΈ ν¨ν΄" κ°μλ₯Ό λ£κ³ 곡λΆν λ΄μ©μ λ°νμΌλ‘ κΈμ μμ±νμμ΅λλ€.
Decorator ν¨ν΄μ΄λ?
μμ ν΄λμ€λ₯Ό μ€μ μΌλ‘ μμκ³Ό ν©μ±μ μ΄μ©νμ¬ ν° ν΄λμ€λ₯Ό λ§λλ ν¨ν΄μ λλ€.
μ€μ¬λλ ν΄λμ€λ λ³κ²½ μμ΄ μΆκ° ν΄λμ€λ₯Ό μμ±νμ¬ μμμ νλ©΄μ κΈ°λ₯μ΄ μΆκ°λλ λ°©μμ λλ€.
λͺ¨λ°μΌ UI κ°λ°μ μ£Όλ‘ λ§μ΄ νμ©λλ μλ ν¨ν΄μ λλ€.
Decorator μ¬μ©
public abstract class Widget { public abstract int getColumns(); public abstract int getRows(); public abstract String getRowText(int row); public void show(){ for (int i = 0; i < getRows(); i++) { System.out.println(getRowText(i)); } } }
public class TextWidget extends Widget { private String text; public TextWidget(String text) { this.text = text; } @Override public int getColumns() { return text.length(); } @Override public int getRows() { return 1; } @Override public String getRowText(int row) { return row == 0? text:null; } }
λ€μμ κΈ°λ³Έ μΆμ ν΄λμ€μΈ Widgetκ³Ό Widgetμ μμλ°μ TextWidgetμ΄ μ€μ λλ ν΄λμ€μ λλ€.
TextWidget ν΄λμ€μμλ κ°λ¨ν textλ₯Ό μΆλ ₯νλ ν΄λμ€μ΄κ³ λ³κ²½μμ΄ λ€λ₯Έ ν΄λμ€μ μμκ³Ό ν©μ±λ§μΌλ‘ μΆκ° κΈ°λ₯μ ꡬνν΄λ³΄λλ‘ νκ² μ΅λλ€.
public abstract class Border extends Widget { protected Widget widget; public Border(Widget widget) { this.widget = widget; } }
BorderλΌλ μΆμν΄λμ€λ₯Ό λ§λ€μ΄μ Widgetμ λ©€λ²λ³μλ‘ κ°μ§ μ μλλ‘ ν©λλ€.
public class SideBorder extends Border { public SideBorder(Widget widget) { super(widget); } @Override public int getColumns() { return widget.getColumns()+2; } @Override public int getRows() { return widget.getRows(); } @Override public String getRowText(int row) { return "("+widget.getRowText(row)+")"; } }
public class FullBorder extends Border{ public FullBorder(Widget widget) { super(widget); } @Override public int getColumns() { return widget.getColumns()+2; } @Override public int getRows() { return widget.getRows()+2; } @Override public String getRowText(int row) { if(row == 0 || row == getRows()-1){ return "+"+makeLine('-',widget.getColumns())+"+"; } return "|"+widget.getRowText(row-1)+"|"; } private String makeLine(char ch, int count){ StringBuilder stringBuilder = new StringBuilder(); for(int i=0;i<count;i++){ stringBuilder.append(ch); } return stringBuilder.toString(); } }
Borderλ₯Ό μμνλ SideBorderμ FullBorderλ₯Ό ν΅ν΄ μΆκ° κΈ°λ₯ ν΄λμ€λ₯Ό ꡬνν μ μμ΅λλ€.
- λ©μΈ ν΄λμ€μΈ TextWidgetμ μΆκ°μ μΈ κΈ°λ₯μΈ FullBorderμ SideBorderλ₯Ό ν΅ν΄ λ§μ νμ₯μ ν μ μμ΅λλ€.
κ²°κ³Όνλ©΄
public class Main{ public static void main(String[] args) { new FullBorder( new SideBorder( new FullBorder( new SideBorder( new TextWidget("hello world") ) ) ) ).show(); } }
Mainμ μ€νν κ²½μ° λ€μκ³Ό κ°μ μ€ν κ²°κ³Όλ₯Ό μ»μ μ μμ΅λλ€.
λ°μν'Android > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] μλ° λ°μ΄ν° νμ , λ³μ κ·Έλ¦¬κ³ λ°°μ΄ (0) 2021.01.11 [Java] JVMμ΄λ? μλ° μ½λ μ€ν (0) 2021.01.11 [Java] λμμΈ ν¨ν΄(Adapter ν¨ν΄) (0) 2021.01.07 [Java] λμμΈ ν¨ν΄ (Singleton ν¨ν΄) (0) 2021.01.05 [Java] λμμΈ ν¨ν΄ (Factory ν¨ν΄) (0) 2021.01.05