본문 바로가기

전체 글

(35)
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
Composite 패턴 그릇과 내용물을 같은 종류로 취급하는 패턴 ex. 디렉토리와 파일은 모두 디렉토리 안에 넣을 수 있음. 이런 점을 고려하여 디렉토리와 파일을 같은 종류로 취급 1. 코드 Entry: 접시와 음식을 같은 종류로 만들기 위한 추상 클래스 public abstract class Entry { public abstract String getName(); public abstract int getWeight(); public abstract void add(Entry entry); public abstract void showList(); } Plate: 접시 역할 (접시 위에 접시 또는 음식이 올 수 있음) public class Plate extends Entry { private String name; pr..
strategy 패턴 알고리즘 부분을 분리하여 다양한 알고리즘 방식으로 교체를 용이하게 하는 패턴 1. 코드 Strategy: 알고리즘 부분 클래스의 인터페이스 (1~3 중 하나 뽑는 알고리즘) public interface Strategy { public int getNext(); } RandomStrategy: 알고리즘 클래스1 (랜덤 추출) public class RandomStrategy implements Strategy { @Override public int getNext() { Random random = new Random(); return random.nextInt(3); } } SequentialStrategy: 알고리즘 클래스2 (순차적 추출) public class SequentialStrategy i..
Bridge 패턴 기능부와 구현부를 나눈 후 그 사이를 연결하는 패턴 기능부 : 새로운 기능을 확장해가는 부분 (ex. 사칙연산 기능에 제곱을 구해주는 기능을 추가한 클래스) 구현부 : 추상클래스를 실제로 구현한 부분 (ex. 사칙연산 기능을 가진 추상 클래스를 실제 구현한 클래스) 1. 코드 Display : 기능부의 최상위 클래스(한번 출력하는 기능), impl이 브릿지 역할 public class Display { private DisplayImpl impl; public Display(DisplayImpl impl) { this.impl = impl; } public void start() { impl.start(); } public void print() { impl.print(); } public void fi..
Abstract Factory 패턴 추상 팩토리, 추상 product를 이용한 패턴 실제 구현부분에는 추상 팩토리와 추상 product만 이용, 구체적인 객체는 추상 팩토리를 생성할 때만 명시 1. 코드 AbstractFactory: 추상 팩토리 public abstract class AbstractFactory { public static AbstractFactory getFactory(FactoryType factoryType) { String className = factoryType.name(); AbstractFactory factory = null; try { factory = (AbstractFactory) Class.forName(className).newInstance(); } catch (InstantiationExcep..