我學習使用java的一點體會(5) (轉)

amyz發表於2007-08-16
我學習使用java的一點體會(5) (轉)[@more@]

這篇文章仍然是對《我學習使用的一點體會(3)》的補充。

  我使用java開發一年多,使用的應該還算熟練,最近在閱讀《設計》和《Effective Java》時,又重新學了一下java的基本類庫,對思想有了新的認識。java的基本類庫是由專家設計的,理解基本類庫一方面可以增加自己的開發,另外一方面可以學學專家的設計思路。在java的基本類庫中,使用了很多的設計模式,在很多方面提供擴充套件機制,方便的支援設計模式。可以說java的基礎類庫,將面向設計的Open-Close principle (Software entities should be open for extension,but closed for modification)發揮到了極致。

  在java的基礎類庫中,有些類設計的是為了給java開發者提供工具,直接讓開發者使用的,有些類是專門為繼承而設計的。對於第一種型別的類,使用整合開發工具很容易就能上手使用,而對於第二種型別的類,不主動去學它的,很難掌握它的使用。我舉一個例子。java 2 提供了對模式的支援,在以下示例中,演示瞭如何使用模式(摘自《java與模式》)。主要體會java.lang.reflect.InvocationHandler的用法

package com.javapatterns.proxy.reflect;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import java.lang.reflect.Method;
import java.util.Vector;
import java.util.List;

public class VectorProxy implements InvocationHandler
{
  private proxyobj;

  /** @link dependency */
  /*#Proxy lnkProxy;*/

  public VectorProxy(Object obj)
  {
  proxyobj = obj;
  }

 public static Object factory(Object obj)
  {
  Class cls = obj.getClass();

  return Proxy.newProxyInstance( cls.getClaoader(),
  cls.getInterfaces(),
  new VectorProxy(obj) );
  }

  public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
  {
  System.out.println("before calling " + method);

  if (args != null)
  {
  for (int i=0; i  {
  System.out.println(args[i] + "");
  }
  }

  Object o = method.invoke(proxyobj, args);

  System.out.println("after calling " + method);

  return o;
  }

  public static void main(String[] args)
  {
  List v = null;

  v = (List) factory(new Vector(10));

  v.add("New");
  v.add("York");
  }
}

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-962529/,如需轉載,請註明出處,否則將追究法律責任。

相關文章