Writing /volume1/Web/Public/dokuwiki/data/log/deprecated/2024-11-15.log failed

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
study:java:design_pattern:proxy [2008/10/13 15:09] bananastudy:java:design_pattern:proxy [2021/05/12 00:27] (現在) – [ImageProxy Class] banana
行 2: 行 2:
 원격 프록시(Remote Proxy)는 일반적인 프록시 패턴(Proxy Pattern)을 구현하는 방법 가운데 하나입니다. 원격 프록시(Remote Proxy)는 일반적인 프록시 패턴(Proxy Pattern)을 구현하는 방법 가운데 하나입니다.
 이 외에도 몇 가지 변형된 방법이 있는데, 잠시 후에 알아보도록 하겠습니다. 일단 지금은 일반 프록시 패턴 이 외에도 몇 가지 변형된 방법이 있는데, 잠시 후에 알아보도록 하겠습니다. 일단 지금은 일반 프록시 패턴
-에 대해서 살보도록 하겠습니다.+에 대해서 살보도록 하겠습니다.
  
 프록시 패턴은 다음과 같이 정의됩니다. 프록시 패턴은 다음과 같이 정의됩니다.
行 86: 行 86:
   - **이미지를 가져오는 동안에는 "Loading CD Cover, please wait..."라는 메세지를 화면에 표시합니다.**   - **이미지를 가져오는 동안에는 "Loading CD Cover, please wait..."라는 메세지를 화면에 표시합니다.**
   - **이미지 로딩이 끝나면 paintIcon(), getWidth(), getHeight()를 비롯한 모든 메소드 호출을 이미지 아이콘 객체한테 넘깁니다.**   - **이미지 로딩이 끝나면 paintIcon(), getWidth(), getHeight()를 비롯한 모든 메소드 호출을 이미지 아이콘 객체한테 넘깁니다.**
-  - **사용자가 새로운 이미지를 요청하면 프록시를 새로 만들고 위이 을 새로 진행합니다.**+  - **사용자가 새로운 이미지를 요청하면 프록시를 새로 만들고 위의 을 새로 진행합니다.**
  
  
行 103: 行 103:
  ImageIcon imageIcon;  ImageIcon imageIcon;
  URL imageURL;  URL imageURL;
- Thread retrievalThread;+ Thread retrievalThread; //이미지를 가져오기위한 스레드, 사용자인터페이스가 죽지않도록 별도의 스레드를 생성.
  boolean retrieving = false;  boolean retrieving = false;
   
行 116: 行 116:
  */  */
  public int getIconHeight() {  public int getIconHeight() {
- if(imageIcon!=null) return imageIcon.getIconHeight();+ if (imageIcon != null) return imageIcon.getIconHeight();
  else return 600;  else return 600;
  }  }
行 124: 行 124:
  */  */
  public int getIconWidth() {  public int getIconWidth() {
- if(imageIcon!=null) return imageIcon.getIconWidth();+ if (imageIcon != null) return imageIcon.getIconWidth();
  else return 800;  else return 800;
  }  }
行 132: 行 132:
  */  */
  public void paintIcon(final Component c, Graphics g, int x, int y) {  public void paintIcon(final Component c, Graphics g, int x, int y) {
- if(imageIcon!=null){+ if (imageIcon != null) {
  //아이콘이 이미 준비되어 있으면 그 아이콘 객체의 메소드를 호출합니다.  //아이콘이 이미 준비되어 있으면 그 아이콘 객체의 메소드를 호출합니다.
  imageIcon.paintIcon(c, g, x, y);  imageIcon.paintIcon(c, g, x, y);
  } else {  } else {
- g.drawString("Loading CD cover, please wait...", x+300, y+190);+ g.drawString("Loading CD cover, please wait...", x + 300, y + 190);
  //이미지를 가져오고 있는 중이 아니면...  //이미지를 가져오고 있는 중이 아니면...
- if(!retrieving){+ if (!retrieving) {
  //이미지 로딩작업 시작.(repaint()메소드는 한 스레드에서만 호출하기 때문에, 스레드 안전성은 확보되었다고  //이미지 로딩작업 시작.(repaint()메소드는 한 스레드에서만 호출하기 때문에, 스레드 안전성은 확보되었다고
  //할 수 있습니다.  //할 수 있습니다.
  retrieving = true;  retrieving = true;
- +
  //사용자 인터페이스가 죽지 않도록 별도의 스레드에서 이미지를 가져옵니다.  //사용자 인터페이스가 죽지 않도록 별도의 스레드에서 이미지를 가져옵니다.
  retrievalThread = new Thread(new Runnable(){  retrievalThread = new Thread(new Runnable(){
  public void run(){  public void run(){
  try {  try {
- //이 스레드 내에서 Icon객체의 인스턴스를 생성했습니다. 이미지가 완전히 로딩되어야 생성자에게 + //이 스레드 내에서 Icon객체의 인스턴스를 생성했습니다. 이미지가 완전히 로딩되어야 생성자에게 객체를 리턴합니다.
- //객체를 리턴합니다.+
  imageIcon = new ImageIcon(imageURL, "CD Cover");  imageIcon = new ImageIcon(imageURL, "CD Cover");
  //이미지가 확보되고 나면 repaint()메소드를 호출해서 화면을 갱신합니다.  //이미지가 확보되고 나면 repaint()메소드를 호출해서 화면을 갱신합니다.
行 157: 行 156:
  }  }
  });  });
- +
  retrievalThread.start();  retrievalThread.start();
  }  }
行 200: 行 199:
 } }
 </code> </code>
 +
  
 ===== Test of CD Cover Viewer ===== ===== Test of CD Cover Viewer =====
行 273: 行 273:
   - **메뉴를 이용하여 다른 CD 커버를 불러옵니다. 이미지 로딩이 완료될 때까지 프록시에서 로딩중이라는 메세지를 보여주는 것을 확인해 봐야 되겠죠?**   - **메뉴를 이용하여 다른 CD 커버를 불러옵니다. 이미지 로딩이 완료될 때까지 프록시에서 로딩중이라는 메세지를 보여주는 것을 확인해 봐야 되겠죠?**
   - **로딩중이라는 메시지가 화면에 표시된 상태에서 윈도우 크기를 조절해 봅시다. 프록시에서 이미지를 로딩하고 있을 때도 스윙 윈도우가 멈추거나 하진 않는지 확인해 봅시다.**   - **로딩중이라는 메시지가 화면에 표시된 상태에서 윈도우 크기를 조절해 봅시다. 프록시에서 이미지를 로딩하고 있을 때도 스윙 윈도우가 멈추거나 하진 않는지 확인해 봅시다.**
-  - **%%ImageProxyTestDrive에 여러분이 가지고 있는 CD를 추가해 봅시다.**+  - **%%ImageProxyTestDrive%%에 여러분이 가지고 있는 CD를 추가해 봅시다.**
 다음은 로딩중일 때의 화면입니다. 다음은 로딩중일 때의 화면입니다.
 +
 {{:study:java:design_pattern:loading.jpg|under loding}} {{:study:java:design_pattern:loading.jpg|under loding}}
  
 로딩이 완료되면 이런 윈도우가 만들어집니다. 로딩이 완료되면 이런 윈도우가 만들어집니다.
-{{:study:java:design_pattern:oliver.jpg|oliver}} 
  
 +{{:study:java:design_pattern:oliver.jpg|oliver}}
  
 +===== reference =====
 +  *[[http://www.syboos.jp/sysdesign/doc/20080624135350826.html?page=1|an example of Protection Proxy pattern
 +]]
  
  

QR Code
QR Code study:java:design_pattern:proxy (generated for current page)