Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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 31
Archives
Today
Total
관리 메뉴

아님말고

게시판 설계 하기 1 본문

Etc

게시판 설계 하기 1

스타박씨 2009. 3. 19. 16:08


abstract factory 패턴,
flyweight 패턴,
Singleton 패턴
을 이용한 게시판

- Field (추상클래스)
- TitleField
- WriterField
- FieldFactory

- Page (추상클래스)
- NoticeWritePage
- NoticeListPage

게시판 종류에 따라 파일 업로드 기능이 있는 게시판, 없는 게시판 등등..
이러한 기능을 충족시키기 위해 필드를 종류별로 클래스로 만들고
페이지에서 필요한 필드들을 객체로 만들어 조합하는 식의 게시판을 짜고 있습니다.

문제는 페이지를 하나 생성할때마다 필드 객체가 많이 생성되는 것 같아
flyweight 패턴을 적용해서 필드의 인스턴스를 관리하려는데
글수정하기 페이지 같은 경우 필드에 값을 넣어줘야 하는데
pool에서 필드 인스턴스를 가져와 페이지를 만들다 보니
값을 넣어줄 수가 없네요.

좋은 방법이 없을까요?

아래는 대략적인 생각을 소스로 짜보았습니다.


//필드 클래스
abstract class Field{
 abstract String fieldName;
 abstract String fieldContent;

 public String getFieldContent{
  String content;
  content = "<tr>";
  content += "<td>" + fieldName +"</td>";
  content += "<td>" + fieldContent +"</td>";
  content += "</tr>";
  return content;
 }
}


//제목 필드 클래스
class TitleField extends Field{

 public TitleField(String fieldValue){
  fieldName  = "제목";
  fieldContent = "<input type=text name=title value=" + fieldValue + ">";
 }
}

//작성자 필드 클래스
class WriterField extends Field{
 .........
}

//필드 팩토리 클래스
//필드 객체가 마구 생성되어 메모리가 낭비되는 것을 막고 속도향상을 위해 필드 인스턴스 관리 (flyweight 패턴 적용)
class FieldFactory{
 private HashMap pool = new HashMap();
 private static FieldFactory singleton = new FieldFactory();
 private FieldFactory(){
 }

 public static FieldFactory getInstance(){
  return singleton;
 }

 public synchronized Field getField(String name){
  Field field = (Field)pool.get(name);
  if(field == null){
   if(name == 제목){
    field = new TitleField();
   }else if(){
    ........
   }
   pool.put(name, field);
  }

  return field;
 }
 
}

//화면 만드는 팩토리 클래스
abstract class Page{
 String head;
 String footer;
 ArrayList content = new ArrayList();

 abstract public String makeHTML();
}

//공지사항 글작성 클래스
class NoticeWritePage extends Page{
 head;
 footer;
 content.add(FieldFactory.getField(제목));
 content.add(FieldFactory.getField(작성자));

 public String makeHTML(){
  StringBuffer sb = new StringBuffer();
  head.....
  for(int i=0; i<content.size; i++){
   sb.append(content[i]);
  }
  footer.... 
 } 
}

//공지사항 리스트 클래스
class NoticeListPage extends Page{
 head;
 footer;

 public String makeHTML(){
  ........
 }
}

'Etc' 카테고리의 다른 글

기타 IT 용어 정리  (0) 2023.03.10
게시판 설계하기 3  (0) 2009.03.19
게시판 설계하기 2  (0) 2009.03.19
Comments