Whiteship's Note


엔터프라이즈 컴퓨팅 중간고사 1)-1-가

Design Pattern : 2006.10.23 21:14


 1) [30점] 교과서 4장의 문제를 확장/변경 하고자 한다. 여러 가지 확장/변경의 가능성이 있다. 이번 문제에서는 2차에 걸쳐서 확장/변경 하고자 한다. 프로그램에서 고친 부분을 보여라. 디자인 패턴을 사용해서 어떤 부분이 확장/변경이 용이하도록 해 주었는지 설명하라.

 

1. 1차 확장/변경

     

  가.[10점] 서울에 분점을 내고자 한다. 일반적으로 뉴욕의 피자와 같지만 서울

          사람들은 치즈를 좋아하지 않아서 일반적인 경우의 1/2만 사용한다. 그리고

          페퍼로니 피자의 경우 짜지 않은 “야채페퍼로니”를 사용한다.




top

Write a comment.


Decorator Pattern 예제

Design Pattern : 2006.10.20 16:35


데코레이터 패턴 레포트 상세 내용

게임게발을하고 있습니다. 각 케릭터는 인간이라는 한 종족으로시작을 하게 되며

한 종족은 전사, 마법사, 도둑세 가지의 직업을 가지게 됩니다. 각 케릭터가 착용하게 되는 아이템은 무기, 방어구를 착용하게 됩니다. 그리고 모든 직업은 공통적으로 HP, MP라는 속성값을 가지게 됩니다.

케릭터를생성하여 전사, 마법사, 도둑 세가지의 직업으로 나누어서각 케릭이 어떠한 직업을 가지고 어떠한 이름을 가지고 있는지 보여줍니다. 그 후 아이템을 습득하여 무기및 방어구를 습득하여서 어떠한 아이템을 착용했는지 그리고 그 아이템은 어떠한 상세 내용을 가지고 있는지에 대한 메시지를 창에 보여주게 됩니다.

또한케릭터가 독에 걸리거나 상처를 입는 등 상태이상에 걸리게 되면 케릭터가 상태이상에 걸렸다는 메시지를 창에 보여주면 됩니다.

각 아이템은 다음 예제와 같은 상세한 세부내용이 있습니다.

무기 예제

단검                               데미지 1~10

롱소드                             데미지 10~20

바스타드 소드                      데미지 10~20

방어구 예제

가죽 갑옷                          방어 확률 10%

플레이트 아머                      방어 확률 20%

풀플레이트 아머                    방어 확률 30%

상태이상은 다음 예제와 같은 상세한 세부내용이 존재합니다.

가시독

이동속도가 느려집니다.

맹독

케릭터의 HP가 감소됩니다.

마나독

케릭터의 MP가 감소됩니다.

질병

질병

케릭터의 HP, MP가 감소됩니다.

상처

케릭터가 부상을 입어 활동을 할 수 없습니다.

오.. 지쟈스.. 클래스가 몇개인고.. 이것도 월요일까지 제출해야 한다는거~

오늘 일단 이것부터 해결해야겠군요..

top

Write a comment.


Observe Pattern 예제(끝)

Design Pattern : 2006.10.08 13:49




Auctioneer는 Subjct를 대신했고 Bidder는 Observer 인터페이스를 대신하도록 만들었다. 그리고 각각 ConcereAuctioneer와 ConcreteBidder 클래스를 작성하여 인터페이스를 통해 접근하도록 했다.

그리고 test 클래스를 작성하기 시작했다.

먼저 경매 물품이 나오고 (경매 시작 가격이 있을 것이라 생각했다.) 그다음 경매자들이 그 물품의 구독자(observer)로 등록이 되며(여기서는 구독자 List를 등록하도록 했으며 한명의 구독자를 등록하는 것도 가능하다.) 경매가 시작되면 경매 초기 가격을 모든 구독자들에게 알려 주도록 하였다.

작성된 실제 코드와 초기에 모델링 했던 클래스 다이어그램과는 차이가 있었다.

Auctioneer 인터페이스에서 Bidder를 List로 갖는것이 아니라 ConcereteAuctioneer에서 List로 갖도록 하였다. 인터페이스에 있는 필드에게는  public 만 허용이 되는데 public으로 List를 가지고 상속해서 사용한다면 언제든 List에 바로 접근하여 변경이 가능하다는 것인데 그렇게 되면 ConcreteAuctioneer에 있는 addBidder나 deleteBidder는 무용지물이 된다.

그리고 addBIdders에서 List를 통째로 추가하는 메소드를 추가하였는데 List로 추가를 하면 deleteBidder를 하기가 복잡해 진다. List를 통째로 추가하는 경우 해당 그룹에 있는 원소는 구독을 포기하기가 어렵게 되는데 그렇다면 그룹(List)으로 구독을 등록(add)하는 방법은 제거하고 개인별로(addBIdder) 구독하도록 하는 것이 상황에 맞을 듯하다.


위와 같이 test코드를 수정하고 JUnit을 실행시킨 콘솔 창의 결과물 입니다.


'Design Pattern' 카테고리의 다른 글

Decorator Pattern 예제  (0) 2006.10.20
엔터프라이즈 컴퓨팅 중간고사  (3) 2006.10.18
3장. Decorator Pattern(계속)  (1) 2006.10.17
3장 Decorator Pattern  (0) 2006.10.17
헤드 퍼스트 새책이 나왔었네요  (2) 2006.10.17
Observe Pattern 예제(끝)  (0) 2006.10.08
Observer Pattern 예제  (0) 2006.10.08
Strategy Pattern 예제(끝)  (0) 2006.10.08
Strategy Pattern 예제(계속)  (0) 2006.10.08
Strategy Pattern 예제(계속)  (0) 2006.10.08
Strategy Pattern 예제  (0) 2006.10.08
top

Write a comment.


Observer Pattern 예제

Design Pattern : 2006.10.08 12:02



Obsever Pattern은 1대 다 관계를 정의합니다. 따라서 한 객체의 상태가 바뀌면 다른 것들이 자동적으로 정보를 업데이트 받습니다.

Participant Correspondence:

  • auctioneer가 Subject에 해당합니다. Observer들은 그에게 등록을 해야하기 떄문에 당연히 그는 observer들을 알고 있습니다.
  • 현재 경매가(current bid)는 ConcreteSubject에 해당합니다. Observer들은 이것의 상태에 관심이 있습니다.
  • 경매 참가자(bidder)들은 Observer에 해당합니다. 그들은 현재 경매가가 어떻게 변하는지 알고 싶어합니다.
  • 각 개개인의 경매 참가자들은 ConcreteObservers에 해당하며 서로 다른 tolerance(한계)를 가지고 있습니다.

Consequences:

  • subject와 observer는 추상적으로 묶여 있습니다. actioneer가 아는 것은 경매 참여자(bidder)들이 단지 경매(bid)를 할 것이라는 것 뿐입니다. 개개인의 경매 참여자들이 돈을 얼마나 가지고 있는지는 모릅니다.
  • 의사소통을 위한 방송을 지원합니다. actioneer가 현재 물품가격을 발표하면 이 정보에 관심이 있는 모든 경매 참여자들에게 알려질 것입니다.
  • 경매 참여자들은 또한 예측 불가능한 가격 상승을 겪을 수 있습니다. subject의 상한가를 모르기 때문입니다. 따라서 50$까지만 가격을 불러보고 그만 둘 수도 있습니다.

top

Write a comment.


Strategy Pattern 예제(끝)

Design Pattern : 2006.10.08 11:32


Worker List Manager의 class diagram에 추가 사항.
위에서 생각해 보았던 문제가 들어맞았다...
필요없이 모양에 끼워 맞추려다가 오히려 복잡해지기만 했다.
그래서 과감히 필요없는 부분은 제거했다.

보라색 부분에 있던 sub class들을 몽땅 없애버렸다.
WorkerListManager를 사용해서도 충분히 지시된 사항들이 가능하기 때문이다.
나중에 필요하게 되면 다시 상속을 하여 사용하도록 하면 될 듯하다.
유지보수 측면을 따지자면.. 새로운 종류의 Worker들이 나타나면 소스코드가 상당히 바뀌게 된다는 문제점도 있다.. 그쪽도 어떻게든 해결을 해야 될 것 같은데.. 일단은 이상태로 제출을 해도 무관할 듯하다. 설마 교수님께서 이 글을 보시진 않으시겠지?? ㅋㅋ;;

'Design Pattern' 카테고리의 다른 글

3장. Decorator Pattern(계속)  (1) 2006.10.17
3장 Decorator Pattern  (0) 2006.10.17
헤드 퍼스트 새책이 나왔었네요  (2) 2006.10.17
Observe Pattern 예제(끝)  (0) 2006.10.08
Observer Pattern 예제  (0) 2006.10.08
Strategy Pattern 예제(끝)  (0) 2006.10.08
Strategy Pattern 예제(계속)  (0) 2006.10.08
Strategy Pattern 예제(계속)  (0) 2006.10.08
Strategy Pattern 예제  (0) 2006.10.08
Head First Degisn Patterns 소스코드 다운받기.  (0) 2006.10.08
2장 Observer Pattern(끝)  (0) 2006.10.05
top

Write a comment.


Strategy Pattern 예제(계속)

Design Pattern : 2006.10.08 11:31


Worker List Manager의 class diagram 에서는 Id로 list를 관리하는 class밖에 없었기 때문에..
기본적으로 setter에서 id를 가지고 sorting을 하는 QuicjSorting이나 InsertionSorting을 사용하였습니다.
하지만 이번에는 Name으로 list를 관리하는 class가 추가 되었습니다.
이렇게 추가 되면서 이제는 setter에서 id를 가지고 Sorting을 하는 알고리즘을 injection하는 것이 아니라.. name을 가지고 Sorting하는 알고리즘을 injection해야합니다.
따라서 다음과 같이 다이어 그램이 바뀌게 됩니다.

SoringBehavior에는 기존의 Sorting들이 Id를 가지고 Sorting하였기에 ById라고 좀더 명확하게 이름을 바꿨으며 ByName의 class두개를 추가하였습니다. 그리고 NameListManager의 setSotringBehavior()에서는 InsertoinSortingByName으로 injection할 것입니다.

'Design Pattern' 카테고리의 다른 글

3장 Decorator Pattern  (0) 2006.10.17
헤드 퍼스트 새책이 나왔었네요  (2) 2006.10.17
Observe Pattern 예제(끝)  (0) 2006.10.08
Observer Pattern 예제  (0) 2006.10.08
Strategy Pattern 예제(끝)  (0) 2006.10.08
Strategy Pattern 예제(계속)  (0) 2006.10.08
Strategy Pattern 예제(계속)  (0) 2006.10.08
Strategy Pattern 예제  (0) 2006.10.08
Head First Degisn Patterns 소스코드 다운받기.  (0) 2006.10.08
2장 Observer Pattern(끝)  (0) 2006.10.05
2장 Observer Pattern(계속)  (2) 2006.10.05
top

Write a comment.


Strategy Pattern 예제(계속)

Design Pattern : 2006.10.08 11:30




먼저 Worker들을 세 종류로 나누었고 바뀌는 getSalary와 display를 각각의 class에서 구현하도록 Worker class를 abstract로 선언했습니다.
그리고 녹색 부분이 Strategy Pattern 을 적용한 부분입니다.
마지막으로 최종적으로 WorkerListManager를 상속 받은 IdListManager에서 Id를 가지고 정렬하도록 sortingBehavior를 때에 따라 바꿔가며 사용할 것입니다.

'Design Pattern' 카테고리의 다른 글

헤드 퍼스트 새책이 나왔었네요  (2) 2006.10.17
Observe Pattern 예제(끝)  (0) 2006.10.08
Observer Pattern 예제  (0) 2006.10.08
Strategy Pattern 예제(끝)  (0) 2006.10.08
Strategy Pattern 예제(계속)  (0) 2006.10.08
Strategy Pattern 예제(계속)  (0) 2006.10.08
Strategy Pattern 예제  (0) 2006.10.08
Head First Degisn Patterns 소스코드 다운받기.  (0) 2006.10.08
2장 Observer Pattern(끝)  (0) 2006.10.05
2장 Observer Pattern(계속)  (2) 2006.10.05
2장 Observer Pattern(계속)  (0) 2006.10.05
top

Write a comment.


Strategy Pattern 예제

Design Pattern : 2006.10.08 11:22


Strategy Pattern을 이용한 사원 List 관리

사원의 List를 관리하는 프로그램을 작성합니다.
기존의 legacy system에서 사용하던 사원의 data는 txt파일 형태로 존재 합니다. 예를 들어 모든 data는 id, name, salary, commission, hourOfWorked, payPerHour 순으로 입력이 되어 있으며 사원의 종류에 따라 어떤 직원은 salary만 기입되어 있는 data도 있으며 salary와 commission만 기입되어 있는 data도 있고 hourOfWorked와 payPerHour만 기입되어 있는 사원이 있습니다. 즉 어떤 사원은 월급을 계산할 때 salary만 주면 되는 것이고 어떤 사원은 salary +commission을 주고 어떤 사원은 시급 * 일한 시간을 계산하여 월급을 계산합니다. 그리고 직원들은 현재 무작위순입니다.
위 txt파일로부터 직원들의 정보를 읽어 들여서 새로운 웹기반의 시스템에서 사용하려고 합니다. 이 직원들의 List를 관리하는 프로그램을 사용하여 직원들을 id또는 이름순으로 정렬하고자 합니다. 정렬 할 때 맨 처음 무작위 순으로 되어 있는 경우는 Quick Sorting이나 Merge Sorting을 사용하는 것이 효율적입니다. 하지만 새로운 직원이 List에 추가 되거나 삭제 될 때는 Insertion Sorting을 사용하는 것도 효율적입니다. 여기서 다시 이름순으로 정렬을 할 때는 기존의 data들이 id순으로 정렬되어 있기 때문에 이름순으로 따진다면 무작위순으로 되어 있는 것과 마찬가지입니다. 따라서 다시 Quick Sorting이나 Merge Sorting을 사용하여 Sorting을 하고 다시 새로운 직원을 추가하거나 삭제 할 때는 Insertion Sorting을 사용할 수 있습니다.

위 상황에 적합하도록 Class들을 구현하여(Design이 보통 선행 될 것입니다.) test class를 작성하여 test해 봅시다.

요약


1. txt 파일로부터 data를 읽어 들여 월급 정보에 따라 직원들의 type에 맞는 객체를 생성하여 List에 추가할 것.
2. List를 Id 순 또는 Name 순으로 최초 정렬을 할 것.(이 때는 Quick Sorting or Merge Sorting사용.)
3. 새로운 직원을 생성하여 List에 추가할 할 것.(이 때는 Insertion Sorting을 사용할 것.)
4. 2번에서 Id로 정렬하였다면 이번에는 Name으로 정렬하도록 합시다.(Name으로 정렬하는 List 관리자로 대체 하면 될 것입니다.)
5. 다시 최초 정렬을 하고.
6. 새로운 직원을 생성하여 추가합니다.

'Design Pattern' 카테고리의 다른 글

Observe Pattern 예제(끝)  (0) 2006.10.08
Observer Pattern 예제  (0) 2006.10.08
Strategy Pattern 예제(끝)  (0) 2006.10.08
Strategy Pattern 예제(계속)  (0) 2006.10.08
Strategy Pattern 예제(계속)  (0) 2006.10.08
Strategy Pattern 예제  (0) 2006.10.08
Head First Degisn Patterns 소스코드 다운받기.  (0) 2006.10.08
2장 Observer Pattern(끝)  (0) 2006.10.05
2장 Observer Pattern(계속)  (2) 2006.10.05
2장 Observer Pattern(계속)  (0) 2006.10.05
2장 Observer Pattern  (0) 2006.10.05
top

Write a comment.