Java/design pattern bridge pattern 우혁이 아빠 2012. 7. 26. 14:58 @Test public void test() { Display d1 = new Display(new StringDisplayImpl("Hello, Korea.")); Display d2 = new CountDisplay(new StringDisplayImpl("Hello, world.")); CountDisplay d3 = new CountDisplay(new StringDisplayImpl("Hello, Universe.")); d1.display(); d2.display(); d3.display(); d3.multiDisplay(5); } package com.tistory.temp.pattern.bridge; /** * 기능의 클래스 계층 * */ public class Display { private DisplayImpl impl; public Display(DisplayImpl impl) { this.impl = impl; } public void open() { impl.rawOpen(); } public void print() { impl.rawPrint(); } public void close() { impl.rawClose(); } public final void display() { open(); print(); close(); } } package com.tistory.temp.pattern.bridge; /** * 구현의 클래스 계층 * */ public abstract class DisplayImpl { public abstract void rawOpen(); public abstract void rawPrint(); public abstract void rawClose(); } package com.tistory.temp.pattern.bridge; /** * 진정한 구현의 클래스 계층 * */ public class StringDisplayImpl extends DisplayImpl { private String string; private int width; public StringDisplayImpl(String string) { this.string = string; this.width = string.getBytes().length; } @Override public void rawOpen() { printLine(); } @Override public void rawPrint() { System.out.println("|" + string + "|"); } @Override public void rawClose() { printLine(); } private void printLine() { System.out.print("+"); for (int i = 0; i < width; i++) { System.out.print("-"); } System.out.println("+"); } } package com.tistory.temp.pattern.bridge; /** * 기능의 클래스 계층 * 추가기능을 위해 만들어졌다. */ public class CountDisplay extends Display { public CountDisplay(DisplayImpl impl) { super(impl); } public void multiDisplay(int times) { open(); for (int i = 0; i < times; i++) { print(); } close(); } } 저작자표시 (새창열림)