본문 바로가기

디자인 패턴/Java언어로 배우는 디자인패턴 입문 책 정리

(19)
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..
Builder 패턴 생성자를 만들때 변수 초기화를 생성자 파라미터에서 하는게 아니라 각 변수이름의 함수를 이요해 구조적으로 초기화 하는 디자인 패턴 1. 코드 MyClass : bulider 패턴을 이용해 생성하는 객체 public class MyClass { private int a; private String b; private float c; public static class Builder { private int a; private String b; private float c; public Builder(int a) { this.a = a; } public Builder b(String b) { this.b = b; return this; } public Builder c(float c) { this.c = c;..
Prototpye 패턴 객체를 new가 아닌 clone을 이용해 복사해오는 패턴 1. 코드 MessageBox : 복제할 class public class MessageBox implements Cloneable{ private char decochar; public MessageBox(char decochar) { this.decochar = decochar; } public void use(String s) { System.out.println(decochar + s + decochar); } public MessageBox createClone() { MessageBox result = null;; try { result = (MessageBox)clone(); } catch (CloneNotSupportedExcepti..
Singleton 패턴 객체를 하나만 만드는 패턴 1. 코드 TicketMaker : 티켓을 만드는 싱글턴 클래스 public class TicketMaker { private static TicketMaker tichetMaker = new TicketMaker(); private int ticket = 1; private TicketMaker() { } public static TicketMaker getInstance() { return tichetMaker; } public synchronized int getTichek() { return ticket++; } } Main : test 클래스 public class Main { public static void main(String[] args) { TicketMake..
Factory Method 패턴 객체를 Factory클래스에서 Template Method패턴을 이용하여 만드는 패턴 1. 코드 MyAbstractFactory : 객체 생성 실행 흐름을 기술한 상위 클래스 public abstract class MyAbstractFactory { public final Product create(String owner) { Product product = createProduct(owner); registerProduct(product); return product; } protected abstract Product createProduct(String owner); protected abstract void registerProduct(Product product); } MyFactory : 실제..