Ch.22 Command Pattern 장 덕 성 계명대학교 컴퓨터공학과 정보공학실험실

Slides:



Advertisements
Similar presentations
6 장 객체 - 지향 설계 ③. 목차 GUI 레이아웃  전화기 키 패드 전화기 키 패드 전화기 키 패드 모양의 GUI 를 만드는 Telephone.java, TelephonePanel.java 를 완성해 보자.  주석을 참고하여 TelephonePanel.java.
Advertisements

어서와 Java는 처음이지! 제3장선택과 반복.
명품 JAVA Essential.
- 계산기 GUI 구성하기 - 조원: 박강국 오정은 이귀식 김도윤 안영진.
10. 예외 처리.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
9장. 스윙 프로그래밍.
GUI 이벤트, 이벤트 리스너와 이벤트 소스 그림 그리기 내부 클래스
제7장 이벤트 프로그래밍.
객체지향 프로그래밍.
7장 배열 ②.
7장 배열 ③.
레이아웃 관리자 스윙 구성요소 비트박스 프로그램
명품 JAVA Programming 제 13 장 스레드와 멀티태스킹.
컴퓨터 프로그래밍 실습 #7 제 4 장 GUI 클래스 작성.
명품 JAVA Essential.
Java로 배우는 디자인패턴 입문 Chapter 22. Command 명령을 클래스로 만든다
명품 JAVA Programming.
자바란 무엇인가? JDK의 다운로드 및 설치 방법 Hello, Java 프로그램의 작성 자바 프로그램의 작동 원리
제 4 장 클래스 작성 Lab 4- 2.
DB와 WEB 연동(1) [2-Tier] Java Applet 이용
9장 AWT(1).
명품 JAVA Programming 제 4 장 클래스와 객체.
[INA470] Java Programming Youn-Hee Han
10장 객체-지향 프로그래밍 II ©창병모.
Power Java 제19장 배치 관리자(Layout Manager).
명품 JAVA Programming 제 12 장 그래픽.
java.awt 패키지의 단순 컴포넌트와 이벤트 처리
Java로 배우는 디자인패턴 입문 Chapter 22. Command 명령을 클래스로 만든다
객체지향 언어와 클래스, 객체 ㅎㅎ 개요 클래스의 선언, 객체의 생성 및 속성 참조 방식 멤버 변수 메소드 한빛미디어(주)
Swing 컴포넌트 텍스트 컴포넌트 텍스트 필드 텍스트 영역 스크롤 페인 체크 박스 라디오 버튼.
Java Seminar Chapter 4.
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
9장 다형성 Lab 9-2.
10장 예외 Lab 10-2.
01. 직렬화와 역직렬화에 대하여 객체의 직렬화 직렬화와 역직렬화
명품 JAVA Essential.
5장 조건과 반복 ③.
명품 Java Programming.
명품 JAVA Essential.
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
메모장 구동.
9장 AWT(1).
명품 JAVA Programming 제 15 장 애플릿과 멀티미디어.
This, static, final 지정 예약어 자바 4대 중첩 클래스
김 정 석 Web Programming 김 정 석
패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.
4장 Random Number 프로그래밍 언어 실험실 석사 3학기 박중기
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
어서와 Java는 처음이지! 제9장 인터페이스, 패키지.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
컴퓨터공학실습(I) 3주 인공지능연구실.
Chapter3 : 객체지향의 개념 3.1 객체지향(object-oriented)과
Chap02 객체 지향 개념 2.1 객체지향(object-oriented)과 절차지향(procedural-oriented)
JA A V W. 04.
Memento (GOF Pattern) TP Version 1.0
JA V A W. 07 Sb.L.
JA A V W. 06.
제8장 쓰레드 프로그래밍.
[ 단원 06 ] 상속과 다형성.
제 4 장 클래스 작성 Lab 4- 2.
Outline 클래스의 해부 캡슐화(Encapsulation) 메쏘드의 해부 그래픽 객체(Graphical Objects)
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
Chapter 4 클래스 작성.
자바 프로그래밍 Thread를 이용한 애니메이션 서울호서전문학교 게임프로그램개발과.
Java 5장. 객체지향 개념 public class SumTest {
실습과제 1번 /* 1. 멤버 변수로 반경 radius를 갖고, 그 값을 모니터에 출력하는
Java의 정석 제 7 장 객체지향개념 II-3 Java 정석 남궁성 강의
Chapter2 : 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합개발환경(IDE)
Chapter8 : 인터페이스와 패키지 8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용
Presentation transcript:

Ch.22 Command Pattern 장 덕 성 계명대학교 컴퓨터공학과 정보공학실험실 명령의 집합을 보존해서 똑 같은 명령을 재실행할 수 있도록 한다. 예에서는 명령이 mousedrag이며, 1) mousedrag할 때 canvas에 그림을 그리고 2) 이 명령을 저장 (MacroCommand의 commands 필드에 저장) 3) clear 버튼을 누르면 mousedrag한 것과 똑같은 명령을 한번 더 수행하고 저장된 명령을 지움 장 덕 성 계명대학교 컴퓨터공학과 정보공학실험실

Ch.22 Command Pattern ▌MacroCommand Class ▌DrawCommand Class package command; import java.util.Stack; import java.util.Iterator; public class MacroCommand implements Command { private Stack commands = new Stack(); public void execute() { Iterator it = commands.iterator(); while (it.hasNext()) { ((Command)it.next()).execute(); } } public void append(Command cmd) { if (cmd != this) { commands.push(cmd); } public void undo() { if (!commands.empty()) { commands.pop(); } public void clear() { commands.clear(); package drawer; import command.Command; import java.awt.Point; public class DrawCommand implements Command { protected Drawable drawable; private Point position; public DrawCommand(Drawable drawable, Point position) { this.drawable = drawable; this.position = position; } public void execute() { drawable.draw(position.x, position.y); MacroCommand의 append()는 stack에 push, clear()는 stack의 내용을 clear, execute()는 stack 안에 있는 모든 command에 대해 execute를 실행. DrawCommand의 drawable은 DrawCanvas의 instance. 그러므로 drawable.draw는 DrawCanvas.draw 장 덕 성 계명대학교 컴퓨터공학과 정보공학실험실

Ch.22 Command Pattern ▌DrawCanvas Class 장 덕 성 계명대학교 컴퓨터공학과 정보공학실험실 package drawer; import command.*; import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class DrawCanvas extends Canvas implements Drawable { private Color color = Color.red; private int radius = 6; private MacroCommand history; public DrawCanvas(int width, int height, MacroCommand history) { setSize(width, height); setBackground(Color.white); this.history = history; } public void repaint(Graphics g) { history.execute(); public void draw(int x, int y) { Graphics g = getGraphics(); g.setColor(color); g.fillOval(x - radius, y - radius, radius * 2, radius * 2); DrawCanvas의 repaint()는 history.execute()를 call. history는 MacroCommand의 instance이므로 stack 안의 모든 command를 수행. 장 덕 성 계명대학교 컴퓨터공학과 정보공학실험실

Ch.22 Command Pattern ▌Main Class // import문 생략 pack(); setVisible(true); } public void actionPerformed(ActionEvent e) { if (e.getSource() == clearButton) { history.clear(); canvas.repaint(); } public void mouseDragged(MouseEvent e) { Command cmd = new DrawCommand(canvas, e.getPoint()); history.append(cmd); cmd.execute(); public void windowClosing(WindowEvent e) { System.exit(0); } public static void main(String[] args) { new Main("Command Pattern Sample"); // import문 생략 public class Main extends JFrame implements ActionListener, MouseMotionListener, WindowListener { private MacroCommand history = new MacroCommand(); private DrawCanvas canvas = new DrawCanvas(400, 400, history); private JButton clearButton = new JButton("clear"); public Main(String title) { super(title); this.addWindowListener(this); canvas.addMouseMotionListener(this); clearButton.addActionListener(this); Box buttonBox = new Box (BoxLayout.X_AXIS); buttonBox.add(clearButton); mainBox.add(buttonBox); mainBox.add(canvas); getContentPane().add(mainBox); Main의 생성자는 clearButton과 canvas를 만듬 1) mouseDragged가 수행되면 MacroCommand.append()를 수행 하여 stack에 cmd를 저장하고, DrawCommand.execute()를 수행  DrawCanvas.draw()를 수행 2) clearButton을 누르면 MacroCommand.clear()를 수행하여 stack 속의 모든 명령을 삭제하고, DrawCanvas.repaint()를 수행  MacroCommand.execute()  DrawCommand.execute()  DrawCanvas.draw()를 수행 장 덕 성 계명대학교 컴퓨터공학과 정보공학실험실