디자인패턴
-
행위패턴 : Interpreter 패턴디자인패턴 2013. 2. 27. 10:11
분류 : 행위패턴(Behavioral Patterns) 정의 : 언어에서 문장을 해석할때 사용되는 패턴 용도 :SQL 같은 데이터베이스 쿼리 언어에 상용통신 프로토콜을 설명하는데 자주사용됨. 소스 import java.util.Map; public interface Expression { public int interpret (Map variables); } import java.util.Map; public class Minus implements Expression { Expression leftOperand; Expression rightOperand; public Minus(Expression left, Expression right) { leftOperand = left; rightOperand..
-
행위패턴 : Command 패턴디자인패턴 2013. 2. 26. 09:30
분류 : 행위패턴(Behavioral Patterns) 정의 : 요청을 객체 형태로 캡슐화해서 서로 요청이 다른 사용자의 매개변수와, 요청 저장 또는 로깅, 명령의 취소를 지원하게 하는 패턴 용도 :GUI 버튼과 메뉴 아이템매크로 기록다단계 Undo네트워크를 통한 명령 전송 병렬처리진행상태 바스레드 풀트랜잭션형 행위마법사 형태의 처리 소스 //커맨드 인터페이스 public interface Command { void execute(); } // 라이트를 켜는 명령(커맨드) - ConcreteCommand #1 public class FlipUpCommand implements Command { private Light theLight; public FlipUpCommand(Light light) { th..
-
행위패턴 : Chain of Responsibility 패턴디자인패턴 2013. 2. 7. 09:30
분류 : 행위패턴(Behavioral Patterns) 정의 :명령(command) 객체들과 프로세싱(processing) 객체들의 집합으로 구성된 디자인 패턴. 각각의 프로세싱객체들은 명령객체가 처리할수 있는 타입을 정의하는 로직을 포함. 용도 :좀 더 느슨한 결합을 가능하게 만듬. 소스 public abstract class Logger { public static int ERR = 3; public static int NOTICE = 5; public static int DEBUG = 7; protected int mask; //chain of responsibility의 다음 요소 protected Logger next; public void setNext(Logger log) { next = l..
-
구조패턴 : Proxy 패턴디자인패턴 2013. 2. 6. 10:00
분류 : 구조패턴(Structural Patterns) 정의 :일반적인 형태의 프록시는 중복하기에는 너무 비용이 비싸거나 중복자체가 불가능한 네트워크 연결, 메모리내부의 대형객체, 파일, 또는 다른 자원들에 대한 인터페이스이다. 용도 :어플리케이션의 메모리 자원을 절약하기위해 사용될 수 있음. 소스 public interface Image { public void displayImage(); } //System A public class RealImage implements Image { private String filename = null; /** * 생성자 * @param FILENAME */ public RealImage(final String FILENAME) { filename = FILENA..
-
구조패턴 : Flyweight 패턴디자인패턴 2013. 2. 5. 09:30
분류 : 구조패턴(Structural Patterns) 정의 :다른 유사한 객체와 가능한 많은 데이터를 공유함으로써 메모리 사용량을 최소화하는 객체를 flyweight라고 함. 용도 :메모리 사용량을 줄여서 효율성을 높임. 소스 //Flyweight 객체 인터페이스 public interface CoffeeOrder { public void serveCoffee(CoffeeOrderContext context); } //ConcreteFlyweight를 생성하는 ConcreteFlyweight 객체 public class CoffeeFlavor implements CoffeeOrder { private final String flavor; public CoffeeFlavor(String newFlavor..
-
구조패턴 : Facade 패턴디자인패턴 2013. 1. 29. 09:30
분류 : 구조패턴(Structural Patterns) 정의 :클래스 라이브러리 같은 큰 몸집의 코드에 대한 단순화된 인터페이스를 제공하는 패턴 용도 :소프트웨어 라이브러리를 사용, 이해, 테스트하기 쉽게 만듬.라이브러리의 가독성을 증가시킴외부코드의 라이브러리에 대한 의존성을 감소시킴. 시스템 개발할때 유연성을 더해줌.잘 작성되지 않은 API들을 하나의 잘 정리된 API로 포장해줌. 소스 //컴퓨터 부품 public class CPU { public void freeze() { System.out.println("cpu freeze."); } public void jump(long position) { System.out.println("cpu jump."); } public void execute() ..
-
구조패턴 : Decorator 패턴디자인패턴 2013. 1. 28. 09:30
분류 : 구조패턴(Structural Patterns) 정의 :같은 클래스의 다른 객체에 영향을 미치지 않고 개별 객체에 기능을 추가하는 패턴. 용도 :Window라는 클래스에 수직, 수평 스크롤바를 추가하려고 하면, 상속을 통해서 하면 ScrollingWindow라는 서브 클래스를 만들면 가능함. 이때는 데코레이터 패턴과 상속간의 차이가 없음. 그런데 이 상태에서 Window클래스에 다른 기능을 추가하려고 하면 문제가 발생함. Border 기능을 추가한다고하면, 상속을 통해서 구현했을때는 BorderScrollingWindow, BorderWindow이렇게 2개를 추가해 주어야함. 그리고 다른 기능을 추가하려고 하면 매번 중복해서 클래스들을 추가해 주어야 함. 그러나 데코레이터를 통해서 한다면 스크롤과..