레이블이 design pattern인 게시물을 표시합니다. 모든 게시물 표시
레이블이 design pattern인 게시물을 표시합니다. 모든 게시물 표시

2015년 10월 25일 일요일

Abstract Factory

공통의 Todo 목표를 가진 제품의 생산방식을 대표클래스를 통해 추상화하고, 하위 클라이언트 클래스에서는 이를 구현하기만 하면 되는 패턴이다.

예제

인터페이스 render{
구체화된 하위 클래스들이 공통적으로 구현 해야할 기능 (예.  render , user, paint,  등..)
}

각각 구체화된 하위 클래스 implement   render{
인터페이스 render 의 메쏘드를 각자 제각각 구현
}

추상 팩토리 객체 AbstractRenderFactory{
추상화된 생성객체를 생성해서 이  객체를 상속받아 생성하는 객체를 통해 render 방식을 결정
}

추상팩토리 객체의 하위 클래스 extend AbstractRenderFactory{
추상팩토리 객체에 정의된 생성메쏘드를 오버라이드 하고, 구체화된 하위클래스의  render 를 실행.
}

 

 

참고:

https://www.youtube.com/watch?v=soV1C6j9kkg
http://warmz.tistory.com/758 - 추천
http://alleysark.tistory.com/169  - 추천2
http://designpatternsphpko.readthedocs.org/ko/latest/Creational/AbstractFactory/README.html
http://dsheiko.com/weblog/design-patterns-by-php-and-js-es5-examples/#abstract-factory

2015년 10월 15일 목요일

6. Factory pattern

http://arnakiel.blogspot.kr/2010/01/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4%EC%9D%98-%EB%84%A4%EB%B2%88%EC%A7%B8-%ED%8C%A9%ED%86%A0%EB%A6%AC-%ED%8C%A8%ED%84%B4factory-pattern-1.html

http://outliers.tistory.com/14

2015년 10월 12일 월요일

5.Decorator pattern

참고. http://warmz.tistory.com/757 (*발췌 ava.io 패키지에는 어마어마하게 많은 클래스들이 있지만, 많은 부분이 데코레이터 패턴을 바탕으로 만들어져 있다.)

http://stevenjsmin.tistory.com/73

http://donxu.tistory.com/96

http://code.tutsplus.com/tutorials/design-patterns-the-decorator-pattern--cms-22641

 

http://tiboy.tistory.com/entry/Decorator-Pattern%EB%8D%B0%EC%BD%94%EB%A0%88%EC%9D%B4%ED%84%B0-%ED%8C%A8%ED%84%B4

http://warmz.tistory.com/entry/Decorator-Pattern-%EB%8D%B0%EC%BD%94%EB%A0%88%EC%9D%B4%ED%84%B0-%ED%8C%A8%ED%84%B4

2015년 10월 10일 토요일

4.adaptter pattern

유지보수 또는 향후 확장성 차원에서 어답터 라는 인터페이스를 통해서 추가로 발생되는 기능이나 기존의 기능에 유연하게 대처할수 있도록 해준다.

추상클래스를 상속받은 기존의 클래스에는  새로운 기능(220볼트 플러그인과같은)이 없기 때문에 , 애덥터 클래스를 새로 추가하여 그 안에 220 둥그런 돼지코 를 110 의 | | 돼지코로 호환되는 구현부를 만들어서 기존 클래스에서 하던방식대로 연결하는 패턴임.

http://tiboy.tistory.com/entry/Adapter-Pattern%EC%96%B4%EB%8E%81%ED%84%B0-%ED%8C%A8%ED%84%B4

http://warmz.tistory.com/763

http://blog.jdm.kr/11 <--쉽게 설명

http://outliers.tistory.com/18

php  예제 : http://redgolems.tistory.com/2

3.Template Method 패턴

상위클래스는 처리의 흐름이 정의 되어 있는 추상클래스이고 ,하위 클래스는 사우이클래스를 상속받아 구체적인 처리를 구현한 클래스가 된다.

따라서 상위 클래스는 하위 클래스가 실제적으로 어떤 구체적인 작업을 하는지 모르며, 서로 다른 하위 클래스들은 나름대로의 방식대로 구현하되 처리의 흐름은 상위 클래스에 정의된대로 따르게 된다.

즉, 탬플릿의 주체가 되는 콘트롤러 의 성격을 띄는 상위클래스에서 흐름을 관장하고, 상속받은 실제 하위 클래스에서는 상위클래스에서 정의된 순서와 규정에 맞게 오버라이딩 하고, 추가 기능등을 구현하게 된다.

따라서 일련의 상속받은 하위 클래스들은 모두 상위 클래스의 템플릿구성대로 구현과 실행하게 되는 패턴이다.

구조가 일관적인 형식의 제품이나 기능들을만들때 주로 사용하는 패턴이다.

Abstract  UpperClass {

abstract public function init();
abstract public function run();
abstract public function end();
final function showMain(){
this->init();
this->run();
this->end();

}
protected int sharedVal = 0; //하위 클래스에서 공통으로 공유하는 변수등.

}

추상클래스인 UpperClass 에는 오버라이디이 불가능한 final 인 showMain 에 정의된 초기와->실행->종료 라는 템플릿으로 하위 클래스에서 실행되도록 구현된것이다.

하위 클래스는 추상메쏘드 들을 각 상황에 맞에 오버라이딩 한다음 showMain() 을 실행하여 동일한 실행 프로세스를 가질수 있도록 했다.

 

http://copynull.tistory.com/124

http://egloos.zum.com/iilii/v/3806897

http://secretroute.tistory.com/entry/Head-First-Design-Patterns-%EC%A0%9C8%EC%9E%A5-Template-Method-%ED%8C%A8%ED%84%B4

http://blog.jdm.kr/116

http://skmagic.tistory.com/entry/Template-Method-Pattern-Class-%EC%A0%95%EB%A6%AC%EB%B3%B8

http://darkneo.tistory.com/7

2015년 4월 17일 금요일

2.옵저버 패턴 (Observer Pattern)

하나의 객체가 변경사항이 생기면 다른객체에 전달하여 적절한 액션을 취할수 있도록 하는 패턴이다.

주로 발행한다. 는 의미가 강함

http://warmz.tistory.com/751 , http://wiki.gurubee.net/pages/viewpage.action?pageId=1507370 의 알람옵저버패턴을 보면이해가 될것이다.

http://hyeonstorage.tistory.com/165

http://tiboy.tistory.com/entry/Observer-Pattern

자바스트립트 옵저버 패턴? http://jsfiddle.net/vasco989k/HPsFp/

http://www.javajigi.net/display/SWD/ch02_observerpattern

object-c 옵저버패턴 http://kyejusung.com/2015/09/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4-2-observer-pattern/

1.디자인패턴-strategy pattern( 전략,전술 패턴)

Stat 패턴과 차이점이 잇는데 , 패턴내부에서 스스로 객체로 변경하는 것은 state 패턴이고

외부에서 객체를 지정해줘야 상태변경이 가능한 것이 strategy 이다

-------------------------------

Strategy 패턴은 주요객체는 공통된 기능(메쏘드)을 상속공유한다는 전제로서, 각 객체의 행동이 독립적인 속성을 가지고자 할때 유용한 패턴이다.

또한 abstract  로 선언된 공통된 기능을 포함한 추상클래스에
고정적으로 선언된 독립된 인터페이스(또는 레퍼런스)를  통해 하위 속성을
지정하는 것만으로도 객체의 특징속성(차는 원래 굴러다니지만, 날개를 붙이면 날라다닐수도 있다)을
변경가능한것이 용이하다는 장점이 있다.

이를 통해 객체의 속성을 실시간으로 변경할수도 있다.

다만 최상위 클래스에서 미리 행동양식들을 계산하고 정의해야 되기때문에,
최상위 클래스를 어떻게 설계하고, 바뀔수 있는 각각의 독립적인 행동양식들을 구분해 내느냐가 관건이다.

게임을 만든다고 치자.

주인공은 처음에는 걷는것만 할수있지만, 점점 아이템을 장착함에 따라 빨리 뛰고,날수 있게된다.
따라서  NPC 에서 MOVE 액션에 걷기를 빨리뛰기로, 또 날개가 장착되었을때는 날라가기로 바꾸기만 하면 해당액션을 할수있다.

물론 상속으로도 해결되지만, 재상속에 의한 스트레스를 줄이기 위해선 그냥 전략패턴을 쓰는게 좋다.

-------------------------------

 

 

http://hyeonstorage.tistory.com/146

굳이 전략 이라는 단어에 끼워 맞춘다면 이렇다.

일단 공격일자는 정해져 있다.
다만 공격 아이템들은 보병,스나이퍼, 자동차, 탱크,오토바이, 비행기, 배 등 다양한다.
보통은 자동차 클래스 따로, 탱크 클래스 따로 따로 만들어서 제어하는게 맞다.

하지만 이렇게 하면 공격아이템들이 늘어날때마다(수륙양용 호버크래프트,드론등..)
같은 행동을 하는 클랙스를 생성해야 한다면 매우 귀찮을 것이다.

따라서 전략 패턴을 적용해서.!!!

일단 병기 라는 추상 클랙스를 만들자.
그리고 나서 병기가 가져야할 공통 부분을 뽑아내 보자. 단 뽑아낸 공통 부분이 각 병기에 따라서 다른 값과 행동으로 구분된다면 이를 별도의 클래스 로 구분할 생각을 하자.
그럼 공통된 부분은
이동
전투
휴식
자멸
등이 있겠다.
이중 이동,전투 는 동일하다. 다른 행동을 취하는 것은 휴식,자멸이다. 비행기나 배 등은 휴식이 없으니까..
따라서 휴식,자멸은 별도의 행동패턴이라고 치부하고, 별도의 클래스로 만들어서 해당되는 병기들에게만 적용한다.

결국 보병,자동차,오토바이 들은 병기 추상클래스의 휴식 인터페이스를 지정하여 주면된다. 인터페이스로 지정해 주었으므로 각 병기에 맞게 쉬는 형태를 설정하면된다.

쉰다 인터페이스

-> 보병:앉아서 메쏘드 ,
-> 자동차,오토바이:시동을 끈다

따른 애들은 지정 안하면 된다.

 

http://jongyoungcha.tistory.com/entry/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4-state-%ED%8C%A8%ED%84%B4%EA%B3%BC-strategy-%ED%8C%A8%ED%84%B4%EC%97%90-%EB%8C%80%ED%95%B4