프로그래밍/자바 디자인패턴 22

디자인패턴 Interpreter 패턴

Interpreter 패턴 이번 패턴은 도스나 리눅스에서 명령어를 치게되는데 shell> ls –a 이런식으로 치죠? 이때 shell>은 무시하고 ls는 명령어고 –a는 옵션이란 것을 인식하게됩니다. 이런식으로 여러 클래스를 만들어서 shell>만 인식하는 클래스 ls만 인식하는 클래스 –a만 인식하는 클래스는 만들어서 각자 할 수 있는 것만 처리하게 해봅시다. 여기서 나오는 명령어는 자동차를 움직입니다. program go end 이런식입니다. program은 위의 shell>과 같이 그냥 시작을 알리는 것이고 go는 명령어 end는 끝을 알립니다. 만약 program repeat 4 go right end end 면 repeat 4는 4번 반복하라는 뜻이고 어떤 것이면 go right를 4번 반복하라..

디자인패턴 Command 패턴

Command 패턴 패키지 이름 해설 command Command 명령을 표현하는 인터페이스 MacroCommand 복수의 명령을 모은 명령을 표현하는 클래스 drawer DrawCommand 점 그리기 명령을 표현하는 클래스 Drawable 그리기 대상을 표현하는 인터페이스 DrawCanvas 그리기 대상을 구현하는 클래스 Anonymous Main 동작 테스트용 클래스 Command 패턴의 핵심은 명령을 시키는 사람과 명령을 구체적인 계획을 가지고 수행하는 사람을 분리시키는 것입니다. 문서열기나 복사하기나 취소하기 는 셋다 명령입니다. 그리고 명령을 수행시키는 사람은 따로 있습니다. 한번 어떻게 분리시켰는지 소스를 보고 실행해봅시다. Command 인터페이스 package command; public..

디자인패턴 Proxy 패턴

Proxy 패턴 이름 해설 Printer 이름있는 프린터를 나타내는 클래스(본인) Printable Printer와 PrinterProxy 공통의 인스턴스 PrinterProxy 이름있는 프린터를 나타내는 클래스(대리인) Main 동작 테스트용 클래스 Printable 인터페이스 package kch; public interface Printable { public abstract void setPrinterName(String name);//이름의 설정 public abstract String getPrinterName();//이름의 취득 public abstract void print(String string);//문자열 표시 } Printer 클래스 package kch; public class P..

디자인패턴 Flyweight 패턴

이름 해설 BigChar ‘큰문자’를 나타내는 클래스 BigCharFactory BigChar의 인스턴스를 공유하면서 생성하는 클래스 BigString BigChar를 모아서 만든 ‘큰 문자열’을 나타내는 클래스 Main 동작 테스트용 클래스 BigChar 클래스 package kch; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class BigChar { //문자의 이름 private char charname; //큰 문자를 표현하는 문자열('#' '.' '\n'의 열) private String fontdata; //생성자 public BigChar(char charname){ ..

디자인패턴 State 패턴

State 패턴 이름 해설 State 금고의 상태를 나타내는 인터페이스 DayState State를 구현하고 있는 클래스, 주간의 상태를 나타낸다. NightState State를 구현하고 있는 클래스, 야간의 상태를 나타낸다. Context 금고의 상태변환를 관리하고 경비센터와 연락을 취하는 인터페이스 SafeFrame Context를 구현하는 클래스, 버튼이나 화면표시 등의 사용자인터페이스를 갖는다. Main 동작 테스트용 클래스 State 인터페이스 package kch; public interface State {//상태를 정의 public abstract void doClock(Context context, int hour);//시간 설정 public abstract void doUse(Cont..

디자인 패턴 Memento 패턴

Memento 패턴 이름 해설 Memento Gamer의 상태를 나타내는 클래스 Gamer 게임을 싱행하는 주인공의 클래스 Memento의 인스턴스를 만든다. Main 게임을 진행시키는 클래스 Memento의 인스턴스를 저장해두고 필요에 따라서 Gamer의 상태를 복원한다. Memento 클래스 package kch; import java.util.List; import java.util.ArrayList; public class Memento{ /** * @uml.property name="money" */ int money;//소지금 /** * @uml.property name="fruits" * @uml.associationEnd multiplicity="(0 -1)" elementType="jav..

디자인패턴 Observer 패턴

이름 해설 Observer 관찰자를 나타내는 인터페이스 NumberGenerator 수를 생성하는 오브젝트를 나타내는 클래스 RandomNumberGenerator 랜덤으로 수를 생성하는 클래스 DigitObserver 숫자로 수를 표시하는 클래스 GraphObserver 간이 그래프로 수를 표시하는 클래스 Main 동작 테스트용 클래스 Observer 인터페이스 package kch; public interface Observer { public abstract void update(NumberGenerator generator); } NumberGenerator 클래스 package kch; import java.util.ArrayList; import java.util.Iterator; public..

디자인패턴 Mediator 패턴

Mediator 패턴 아래 결과화면부터 보시는 것도 이해하는데 좋습니다. 이름 해설 Mediator ‘중개인’의 인터페이스를 결정하는 인터페이스 Colleague ‘회원’의 인터페이스를 결정하는 인터페이스 ColleagueButton Colleague 인터페이스를 구현 버튼을 나타냄 ColleagueTextField Colleague 인터페이스를 구현 텍스트입력을 나타냄 ColleagueCheckbox Colleague인터페이스를 구현 체크박스(라디오버튼)을 나타냄 LoginFrame Mediator 인터페이스를 구현, 로그인 다이얼로그를 나타내는 클래스 Main 동작 테스트용의 클래스 Mediator 인터페이스 package kch; public interface Mediator {//중개인 publi..

디자인패턴 Facade 패턴

Facade 패턴 Facade 는 창구라는 뜻입니다. 버스표를 구입할때 창구에 어디갈지 말하고 돈만 내면 됩니다. 직원이 컴퓨터로 예약하고 바코드를 읽고 돈계산 작업을 하는것은 창구 밖에서는 알지 못합니다. 이런식으로 밖에서 보이는 것은 단순하게하고 안에서는 1. 컴퓨터 예약작업, 2. 바코드 읽기 3. 돈 계산을 처리하고 결과만 고객에게 보여주는 역할을 하는 패턴입니다. 패키지 이름 해설 pagemaker Database 메일 주소에서 사용자 이름을 얻는 클래스 HtmlWriter HTML 파일을 작성하는 클래스 PageMaker 메일 주소에서 사용자의 웹페이지를 작성하는 클래스 Anonymous Main 동작 테스트용 클래스 Database 클래스 package kch; import java.io.F..

디자인 패턴 ProtoType패턴

Prototype패턴 인스턴스를 만들때 new연산자를 쓰는게 아니라 어떤 인스턴스로부터 인스턴스를 만드는 패턴입니다. framework패키지의 Product 클래스 package framework; public interface Product extends Cloneable{//Cloneable인터페이스를 상속받아야 clone메소드 사용 가능 public abstract void use(String s); public abstract Product createClone();//복사본을 만드는 메소드 } framework패키지의 Manage클래스 package framework; import java.util.HashMap; public class Manager { /** * @uml.property na..

반응형