일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- nginx
- Storm
- Clean Code
- Hbase
- elasticsearch
- 스프링 배치
- elastic search
- apache storm
- scala
- Java
- spark
- Domain Driven Design
- hibernate
- 도메인주도설계
- Spring Batch
- hdfs
- SBT
- Angular2
- 제주
- design pattern
- intellij
- Spring
- Spring XD
- docker
- Linux
- Gradle
- 엘라스틱서치
- hadoop
- DDD
- Spring Boot
- Today
- Total
목록design pattern (22)
욱'S 노트
Adapter 패턴은 우리가 인지하지도 못한 사이 엄청나게 사용하고 있는 패턴이다. 과연 Adapter 패턴이란 무엇인가? 다음은 위키피티아의 정의이다. 어댑터 패턴(Adapter pattern)은 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해준다. 한마디로 내가 사용하기 편한 메소드들로 감싼다고 생각을 하면 이해가 쉬울 것이다. 이러한 패턴은 외부 라이브러리를 사용할 때 활용 될 수 있다. 실제 비즈니스 로직을 구현하는데는 외부 라이브러리가 많이 혼재되어 있다면 굉장히 이해하기 어려울 것이다. 이런 경우 내가 사용하고자 하는 인터페이스를 잘 정의하고 그의 구현에서 외부 라이브러리의 클래스들..
When Using It 언어로 문제를 해결하기 Class Diagram Sample Code public interface AbstractExpression { public void interprete(Context context); } public class TerminalExpression implements AbstractExpression { @Override public void interprete(Context context) { String token = context.currentToken(); if (!"go".equals(token) ) { new NonTerminalExpression().interprete(context); } else { System.out.println("g..
When Using It 명령을 클래스로 표현하고 싶을때 Class Diagram Sample Code public interface Command { public void execute(); } public class ConcreteCommand implements Command { private Receiver receiver = new Receiver(); @Override public void execute() { receiver.action(); } } public class Receiver { public void action() { System.out.println("Action Performed!!!"); } } public class Invoker { private List comma..
When Using It 조건에 따른 상태 자체를 클래스로 표현하고 싶을때 Class Diagram Sample Code public interface State { public void handle(Context context, boolean condition); } public class ConcreteState implements State { @Override public void handle(Context context, boolean condition) { if (condition) { System.out.println("ConcreteState Handled."); } else { context.setState(new ConcreteState2()); } } } public class Con..
When Using It 자신의 상태에 변화가 일어났을 경우 Observer들에게 통보하기 Class Diagram Sample Code public interface Observer { public void update(Subject subject); } public class ConcreteObserver implements Observer { @Override public void update(Subject subject) { System.out.println(subject.getState()); } } public abstract class Subject { private List observers = new ArrayList(); public void attach(Observer observ..
When Using It 다수의 객체에 통합적인 지시를 내리기 위한 패턴. 클래스의 기능들을 분할하여 세분화된 클래스로 내렸을때, 세분화된 클래스간의 통신이 필요할때 유용하다. Class Diagram Sample Code public interface Mediator { } public class ConcreteMediator implements Mediator { private Colleague colleague; private Colleague colleague2; public void initializeColleague() { colleague = new Colleague(); colleague2 = new Colleague(); colleague.setMediator(this); colleagu..
When Using It 특정한 데이터 구조 가진 오브젝트를 방문하면서 처리를 하고 싶을때 Class Diagram Sample Code public interface Element { public void accept(Visitor visitor); public void add(Element element); public List getChildren(); } public class ConcreteElement implements Element { private List children = new ArrayList(); @Override public void accept(Visitor visitor) { visitor.visitConcreteElement(this); } @Override publi..
When Using It 알고리즘 구현 부분을 교체 하고 싶을때 Class Diagram Sample Code public interface Strategy { public void algorithmInterface(); } public class ConcreteStrategy implements Strategy { @Override public void algorithmInterface() { } } public class Context { private Strategy strategy; public Context(Strategy strategy) { this.strategy = strategy; } public void contextInteface() { strategy.algorithmInter..
When Using It 하위클래스에 구현을 위임하고 싶을때 Class Diagram Sample Code public abstract class AbstractClass { public abstract void templateMethod1(); public abstract void templateMethod2(); public abstract void templateMethod3(); public void execute() { templateMethod1(); templateMethod2(); templateMethod3(); } } public class ConcreteClass extends AbstractClass { @Override public void templateMethod1() {}..
When Using It Heavy한 Job이 수행되는 클래스들을 미리 만들어 놓고 공유하고 싶을때 Class Diagram Sample Code public interface Aggregate { } public interface Iterator { public Object next(); public boolean hasNext(); } public class ConcreteAggregate implements Aggregate { private Object[] items; public Iterator iterator() { return new ConcreteIterator(this); } public Object getItem(int index) { if ( index < items.length ..