패턴정리

전략패턴

팩토리메소드패턴

템플릿메소드 패턴

옵져버패턴
-
자주 변화하는 클래스에서 변화가 이러날 때 변화를 출력하거나 그 변화를 이용해야 할 메소드를 호출 시키는 것이다.

데코레이터패턴

http://warmz.tistory.com/757

아답터패턴

이터레이터패턴 - iterator 구현체를 사용한 아답터 패턴

파사드패턴

프록시 패턴

플라이웨이트패턴
-
객체 지향 언어는 객체를 생성함으로써 비객체지향 언어에서 할 수 없는 많은 것들을 할 수 있었습니다만, 그 객체라는게 발목을 잡기도 합니다. 바로 성능에서죠. 객체는 메모리도 많이 잡아먹고 생성하는데 많은 비용이 들어갑니다. Flyweight 패턴은 작은 공간(pool)을 만들어 객체를 공유할 수 있게해 객체 생성을 최대한 줄여줍니다.
이 패턴은 대체로 FlyweightFactory에서 객체를 생성합니다. 예를 들어 흰색 선과 파란 선을 그린다고 할 때 각각의 색을 가진 선 객체는 FlyweightFactory에서 만들어져 흰색 선과 파란 선을 그릴때 언제든지 재사용 할 수 있습니다. 따라서 1000개의 흰색 선과 6000개의 파란 선을 그린다고 할 때 7000개의 객체를 생성하는 대신 두 개의 인스턴스만 만들 것입니다.
그런데 어떻게 객체를 재사용 할까요? 분명히 선을 표시할 때는 그 위치나 길이가 달라지는데 우리가 생각하는 '객체'는 다른 상태는 곧 다른 객체를 의미하지 않습니까? Flyweight 패턴은 이 부분을 내부(intrinsic, 선의 색) 상태와 외부(extrinsic, 위치나 길이) 상태로 나눠서 해결하고 있습니다. Flyweight 패턴은 내부 상태는 유지하는 반면에, 외부 상태는 Flyweight 객체가 실행 되는 동안만 유지합니다. 따라서 Flyweight 객체를 손쉽게 변화시켜 재사용 할 수 있습니다.
자바에서 플라이웨이트 패턴을 사용한 가장 대표적인 예는 String 클래스입니다. 같은 내용의 String 객체를 2개 생성한 후 논리 연산자인 == 을 통해 비교해 보면 두 객체가 같다는 걸 알 수 있죠. (equals() 메소드는 String 클래스에서는 문자열의 내용을 비교하도록 오버라이딩 됩니다. 따라서 == 을 사용해야 두 객체가 같은 문자열을 참조하고 있는지 확인할 수 있죠.)

컴포지트 패턴





댓글

이 블로그의 인기 게시물

어쩌다 마주친 spring Error

nginx 설정정리

이클립스에서 톰캣 publish할때 에러