본문 바로가기

디자인 패턴

(22)
State 패턴 상태를 클래스로 만들어 관리하는 패턴 1. 코드 MaterialState : 상태 클래스들의 인터페이스 public interface MaterialState { void speakState(); void speakFeature(); } MaterialState1 : 상태 클래스1 public class MaterialState1 implements MaterialState { private static MaterialState1 instance = new MaterialState1(); private MaterialState1() { } public static MaterialState1 getInstance() { return instance; } @Override public void speakSt..
Memento 패턴 이전 값을 저장해뒀다가 나중에 재사용 하는 패턴 ctrl + z 와 같은 기능 수행 1. 코드 Note : 글을 쓰는 note 클래스 public class Note { private String text = ""; public void addText(String newText) { text += newText; } public Memento makeMemento() { return new Memento(text); } public void undo(Memento memento) { this.text = memento.getText(); } public String getText() { return this.text; } } Memento : 과거의 값들을 저장하는 클래스 public class Meme..
Observer 패턴 객체의 변화를 감지한 후 필요한 액션을 취하는 패턴 1. 코드 Observer : NumberGenerator을 관찰하는 관찰자 인터페이스 public interface Observer { public void update(NumberGenerator numberGenerator); } NumberObserver : observer1 (변경된 숫자 표시) public class NumberObserver implements Observer { @Override public void update(NumberGenerator numberGenerator) { System.out.println("new num : " + numberGenerator.getNum()); } } BarObserver : obser..
Mediator 패턴 여러 객체들 간의 통신을 조정해주는 mediator을 두고, 모든 통신은 mediator을 통해서만 일어나도록 만드는 패턴 1. 코드 (주식의 거래 예시) Stock: 주식을 나타내는 객체 public class Stock { private String name; private int price; public Stock(String name, int price) { this.name = name; this.price = price; } public String getName() { return this.name; } public int getPrice() { return this.price; } } BuyGroup: 매수자의 그룹을 관리하는 클래스 - 비싼 가격에 매수하는 사람이 거래 우선순위를 가진다...
Facade 패턴 복잡한 로직을 숨기고 간단한 인터페이스만 제공하는 패턴 1. 코드 RouteFacade : 인터페이스를 제공하는 facade 클래스 public class RouteFacade { public static int getMinimumNeedTime(int startX, int startY, int endX, int endY) { // 로직1. x,y 좌표를 주소로 변환 String start = XYConverter.toAddress(startX, startY); String end = XYConverter.toAddress(endX, endY); // 로직2. 여러 가지 경로를 검색 List routeList = Route.searchByAddress(start, end); // 로직3. 최단 시간 탐색..
Chain Of Responsibility 패턴 책임을 다른 객체에 전달해가는 패턴 1. 코드 Check: 각각의 책임을 가질 클래스들의 부모 클래스 - next : 다음 책임 객체 public abstract class Check { private String name; private Check next; public Check(String name) { this.name = name; } public Check setNext(Check next) { this.next = next; return next; } public final void validCheck(int num) { if (!isValid(num)) { System.out.println(num + ":" + name +"에서 오류 발생"); return; } if (next == nul..
Visitor 패턴 상태값을 가지는 클래스와 상태값을 이용한 비즈니스 로직을 가지는 클래스를 분리하여 로직 클래스가 상태값 클래스를 방문하면서 로직을 수행하가는 패턴 1. 코드 Element: 상태값 클래스의 부모 클래스 public interface Element { void accept(Visitor visitor); // 로직 클래스의 로직을 실행시키는 메소드 } File: 상태값 클래스1 public class File implements Element { private String name; private int size; public File(String name, int size) { this.name = name; this.size = size; } public String getName() { return ..
Decorator 패턴 오브젝트에 장식을 해 나가는 디자인 패턴 1. 코드 Item: 오브젝트와 장식을 모두 포함한 클래스 public abstract class Item { public abstract int getColumns(); public abstract int getRows(); public abstract String getRowText(int row); public final void show() { int rows = getRows(); for (int i=0; i