Language/Java (11) 썸네일형 리스트형 Part 21. Proxy 21. Proxy 패턴 - 본인을 대신해서 일을 처리하는 사람(대리인) - 초기화하는데 시간이 많이 걸리는 대규모의 시스템에서 유용하다 - 본인이 필요해질 때까지 대리인에게 일을 맡기는 Proxy 패턴 ● 클래스 다이어그램 ※ Printable 인터페이스 (Subject의 역할) - PrinterProxy와 Printer 클래스를 동일시하기 위한 인터페이스 package ch21.A1; public interface Printable { public abstract void setPrinterName(String name);// 이름 설정 public abstract String getPrinterName();// 이름 획득 public abstract void print(String string);//.. Part 18. Memento 18. Memento 패턴 - 이전의 상태를 누군가가 기억하고 있어야 한다 - 현재 객체의 상태를 기록하여 보존하기 위한 Memento 패턴 - 객체 내부 상태를 최대한 공개하지 않고 객체의 상태를 저장하는 방법을 제공함 ● 클래스 다이어그램 ※ Memento 클래스 (Memento의 역할) - 게이머의 상태를 표현하는 클래스 - Originator 역할의 내부 정보를 보존한다 - 생성자에 public이 없다 : 같은 패키지에 속하는 클래스에서만 호출할 수 있다 package ch18.A4.game; import java.io.*; import java.nio.file.*; import java.util.ArrayList; import java.util.List; public class Memento {.. Part 7. Build 7. Build 패턴 - 구조를 가진 인스턴스를 쌓아 올리는 패턴 - 같은 구성 요소(part)를 가지지만, 서로 다른 방법으로 구축 되는 경우에 적용함 - 구조를 가진 인스턴스를 구축하는 Builder 패턴 ● 클래스 다이어그램 ※ Builder 클래스 (Builder의 역할) - ‘문서’를 만들 때 사용되는 구성요소를 생산하는 메소드들을 선언한 추상 클래스 package ch07.Sample; public abstract class Builder { public abstract void makeTitle(String title); public abstract void makeString(String str); public abstract void makeItems(String[] items); pub.. Part 15. Facade 15. Facade 패턴 - ‘창구’ 역할을 담당하는 클래스 - 복잡한 내부는 숨기고, 높은 레벨의 인터페이스(API)를 외부에 제공한다. - 복잡한 시스템을 간단하게 보여준다 ● 클래스 다이어그램 ※ Database 클래스 - 데이터베이스 명을 지정하면, 그 이름에 해당하는 프로퍼티 파일을 열어서 Properties를 만드는 클래스 - 서브시스템을 구성 package hw.ch15.pagemaker; import java.io.FileReader; import java.io.IOException; import java.util.Properties; public class Database { private Database() { } // 데이터베이스 이름에서 Properties를 얻는다 public st.. Part 14. Chain of Responsibility 14. Chain of Responsibility 패턴 - 요구를 처리하는 객체들을 사슬 모양으로 늘어놓고, 요청이 들어오면 누가 처리할 지를 차례차례 체크해 나가는 Chain of Responsibility 패턴 - 어떤 요구가 발생했을 때 그 요구를 처리할 객체를 바로 결 정할 수 없는 경우에는 다수의 객체를 사슬처럼 연결해 두고 객체의 사슬을 차례로 돌아다니면서 목적에 맞는 객체를 결정 하는 경우 - “책임 떠넘기기”가 필요한 경우 ● 클래스 다이어그램 ※ Trouble 클래스 package hw.ch14; public class Trouble { private int number; // 트러블 번호 // 트러블 생성 public Trouble(int number) { this.number = nu.. Part 22. Command 22. Command패턴 - 실행하고자 하는 일이 메소드 호출이 아닌, ‘명령을 나타내는 클래스’의 인스턴스 생성으로 표현 - history를 관리하고 싶을 때, 인스턴스의 집합을 관리하면 된다. - 명령의 집합을 보존해 재실행 할 수도 있고, 또는 여러 개의 명령을 모아서 새로운 명령으로 두면, 똑같은 명령을 명령으로서 재사용할 수도 있다. - ‘명령’을 객체로 표현해서 이력을 보관하기도 하고, 재실행을 할 수도 있는 Command 패턴 ● 클래스 다이어그램 ※ Command 인터페이스 (Command의 역할) - ‘명령’을 표현하기 위한 인터페이스 - 명령의 인터페이스(API)를 정의하는 역할 package hw.ch22.command; public interface Command { public a.. Part 20. Flyweight 20. Flyweight패턴 - 메모리의 사용량이 적다 - 인스턴스를 가능한 한 공유시켜서, 쓸데없이 new를 하지 않도록 한다 - 인스턴스가 필요할 때 마다 new를 하는 것이 아니라, 이미 만들어져 있는 인스턴스를 이용할 수 있으면 공유하자 - 메모리의 소비를 줄이기 위해 인스턴스를 공유시키는 Flyweight 패턴 - 프로그램의 속도를 높일 수 있다. ● 클래스 다이어그램 ※ BigChar 클래스 (Flyweight의 역할) - ‘큰 문자’를 나타내는 클래스 - 큰 문자는 메모리를 많이 차지하므로, BigChar의 인스턴스를 공유하자 package ch20.A1; import java.io.IOException; import java.nio.file.Files; import java.nio.file.. Part 19. State 19. State 패턴 - 클래스를 교체함으로써, ‘상태의 변화’를 나타낼 수 있고, 새로운 상태를 추가해야 할 때 무엇을 프로그램하면 되는지 명 확해진다 - ‘상태’를 클래스로 표현 - 시스템의 각 상태를 클래스로 표현 ● 클래스 다이어그램 ※ State 인터페이스 (State(상태)의 역할) - 금고의 상태를 나타냄 - 각 상태에 따라 다른 행동을 하는 통일된 인터페이스(API)를 결정함 package hw.ch19; public interface State { public abstract void doClock(Context context, int hour);// 시간 설정 public abstract void doUse(Context context);// 금고 사용 public abstract v.. 이전 1 2 다음