티스토리 뷰
### Command 디자인 패턴 ###
: 요청을 객체의 형태로 캡슐화하여 사용자가 보낸 요청을 나중에 이용할 수 있도록 매서드 이름, 매개변수 등 요청에 필요한 정보를 저장 또는 로깅, 취소할 수 있게 하는 패턴이다.
(출처: 위키백과)
=> Command를 하나의 클래스로 만들어서 캡슐화 하는 패턴
< 특징 >
: 요구사항을 객체로 캡슐화 할 수 있고 매개변수를 써서 여러 가지 다른 요구사항을 추가 할 수 있다.
: 사용자의 요청을 객체화하고 해당 객체만 있으면 해당 command가 어떤 작업을 수행했는지 알 수 있다.
: Command 객체는 일련의 행동을 특정 receiver하고 연결하여 요구사항을 캡슐화 한다.
< 용어 정리 >
Client: Command 객체를 생성, Invoker를 통해 Receiver에게 행동을 전달
Invoker: Client에게 명령을 받아서 Command 인터페이스 연결
Command: Receiver을 어떻게 실행 할지 연결(클래스 행동 + Receiver 정보)
Receiver: 행동하는 객체(명령 수행), Command 객체로부터 특정 행동 요청 받음
< 구조 >
### 예제 ###
< 목표 >
: 인쇄 관리 프로그램 개발
< 요구사항 >
: 문서 프로그램이나 이미지 관리 프로그램에서 인쇄를 요청을 하면 그 요청을 받아 지정된 프린터기로 인쇄 페이지를 전달하는 프로그램이다. 인쇄관리 프로그램은 여러 인쇄페이지가 있을 경우 한 번에 한 페이지씩 프린터기로 전송해야 한다. 사용자가 지정한 프린터기를 통해 인쇄되어야 한다.
< 시스템 과정 >
1. 문서/이미지 관리 프로그램이 인쇄 요청(인쇄 페이지)을 인쇄 관리 프로그램에 전달
2. 인쇄 관리 프로그램은 인쇄 페이지를 프린터기에 전달
(조건: 한 번에 한 페이지씩 전송)
3. 프린터는 전달 받은 대로 프린터 실행
(조건: 특정 프린터기 선택)
< 인쇄관리 프로그램 표 Command 패턴 >
인쇄 관리 프로그램 | Command 패턴 |
문서/이미지 관리 프로그램 (Program) |
Client |
인쇄 관리 프로그램 (Copy_control_program) |
Invoker |
인쇄을 하는 것 | setCommand() |
인쇄를 요청하는 것 (Copy_request) |
Command 객체 |
인쇄 페이지를 프린터기에 전달하여 프린터를 요청하는 것 + 한 번에 한 page씩 전송(조건) |
Execute() |
특정 프린터기 선택 | Select_printer() |
프린터 (Printer) |
Receiver |
< 구조 >
# Program 에서 page를 만들어서 Copy_control_program로 page를 보내서 검사하여 Printer에서 복사하는 과정입니다.
class Printer(object):
def __init__(self,check_page):
self.check_page = check_page
#Receiver
def print_copy(self):
print("{} 프린터 하였습니다.".format(self.check_page))
class Copy_control_program(Printer):
# Invoker
def __init__(self, p_page): #page: 프린터 할 page
self._p_page = p_page
def Select_printer(self): #여러 프린터중 1개를 선택하는 과정
print("프린터를 선택했습니다.")
def Execute(self): #page가 1개인지 check하는 과정
if (self._p_page == 1):
self.Select_printer()
Printer(self._p_page).print_copy()
else:
print("여러 page가 들어갔습니다.")
class Program(object):
#Client
def __init__(self,page_cmd):
self.page_cmd = page_cmd
program = Copy_control_program(self.page_cmd)
program.Execute()
if __name__ == "__main__":
print("<여러개 들어갔을 때>")
program_page = Program(2)
print("<1개 들어갔을 때>")
program_page2 = Program(1)
'Tip and Error > ETC' 카테고리의 다른 글
1. Basic (0) | 2021.03.01 |
---|---|
class & id & name 속성 (0) | 2020.10.07 |
(3) templates 짜기(window) => 기본 연결 base 만들기 (0) | 2020.09.16 |
(2) db 생성 & Django adminstration 실행(window) (0) | 2020.09.16 |
(1) 프로젝트 설정(window) (0) | 2020.09.16 |