選擇 project 或者 file, 點鼠標右鍵,選 properties 菜單,在彈出窗口,選 Resource, 設置 Text file encoding 為 UTF-8 就 ok 了
posted @
2008-11-13 18:55 caihaibo 閱讀(530) |
評論 (1) |
編輯 收藏
MyEclipse是Eclipse的一個插件,所以,你必須先安裝Eclipse才可以安裝MyEclipse。
MyEclipse是一個編譯器,要做JAVA程序,就要配置基本的JDK環境變量
一、安裝JDK
首先下載JDK 5.0(JDK 5.0的下載頁面為:
http://java.sun.com/j2se/1.5.0/download.jsp);然后運行JDK 5.0安裝程序jdk-1_5_0_06-windows-i586-p.exe,安裝過程中所有選項保持默認;最后配置JDK的環境變量:在“我的電腦”上點右鍵—>“屬性”—>“高級”—> “環境變量(N)”。
新建系統變量JAVA_HOME:C:\Program Files\Java\jdk1.5.0_06;
新建系統變量CLASSPATH:.;%JAVA_HOME%\lib;(注意:點號表示當前目錄,不能省略)
在系統變量Path的值的前面加入以下內容:%JAVA_HOME%\bin;(注意:這里的分號不能省略)
到這里,JDK安裝完畢。
注意:如果以后要安裝諸如Eclipse、Borland JBuilder、JCreator、IntelliJ IDEA等集成開發環境(IDE,Integrated Development Environment),應該在IDE中編譯運行一個簡單的HelloWorld程序,以保證IDE可以識別出JDK的位置。
二、安裝Tomcat
首先下載jakarta-tomcat-5.0.30.zip,之所以下載免安裝版的好處是可以使用多個Tomcat(jakarta-tomcat-5.0.30.zip的下載頁面為:
http://apache.linuxforum.net/tomcat/tomcat-5/v5.0.30/bin/);
然后將jakarta-tomcat-5.0.30.zip直接解壓到D盤根目錄:
最后配置Tomcat的環境變量:在“我的電腦”上點右鍵—>“屬性”—>“高級”—> “環境變量(N)”。
新建系統變量CATALINA_HOME:D:\jakarta-tomcat-5.0.30
在系統變量CLASSPATH的值的后面加入:%CATALINA_HOME%\common\lib;
在系統變量Path的值中"%JAVA_HOME%\bin;"的后面加入以下內容:%CATALINA_HOME%\bin;
到這里,Tomcat安裝完畢。
進行完一、二兩步的設置以后,各系統變量的值如下:
JAVA_HOME:C:\Program Files\Java\jdk1.5.0_06
CATALINA_HOME:D:\jakarta-tomcat-5.0.30
CLASSPATH:.;%JAVA_HOME%\lib;%CATALINA_HOME%\common\lib;
Path:%JAVA_HOME%\bin;%CATALINA_HOME%\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem
三、安裝Eclipse
首先下載eclipse-SDK-3.1.2-win32.zip(eclipse-SDK-3.1.2-win32.zip下載地址為:
http://www.eclipse.org/downloads/);
然后將eclipse-SDK-3.1.2-win32.zip直接解壓到D盤根目錄:
到這里, Eclipse安裝完畢。
四、安裝MyEclipse
首先下載EnterpriseWorkbenchInstaller_4.1.1GA_E3.1.exe(EnterpriseWorkbenchInstaller_4.1.1GA_E3.1.exe 的下載地址為:
http://www.myeclipseide.com/ContentExpress-display-ceid-10.html);
然后安裝EnterpriseWorkbenchInstaller_4.1.1GA_E3.1.exe。注意:安裝時候要選擇Eclipse的安裝路徑,其他選項保持默認。
安裝完畢之后,將MyEclipse安裝目錄下的features和plugins這2個目錄覆蓋到Eclipse的安裝目錄下。
最后將剛才安裝的 MyEclipse 卸載。
解釋一下上面這樣做的原因:因為MyEclipse是Eclipse的插件,所以只要把features和plugins這2個目錄覆蓋到Eclipse的安裝目錄,Eclipse就會自動認出這些插件。
到這里,MyEclipse安裝完畢。
五、破解MyEclipse
運行MyEclipse4.1.1注冊機MyEclipseKeyGen.exe,選擇MyEclipse的版本號,輸入注冊名,生成序列號。(MyEclipse4.x注冊機的下載地址為:
http://esoft.g8.com.cn/UploadFiles/2006-5/520753587.rar)
運行eclipse.exe(首次運行要求指定Workspace),依次點擊Window ----> Preferences ---->MyEclipse---->Subscription ----> Enter Subscription,輸入注冊名以及注冊機生成的注冊碼。
到這里,MyEclipse破解完畢。
六、指定Eclipse+MyEclipse的JRE
1.設定Eclipse+MyEclipse的JRE
一般情況下,Eclipse可以自動找到JRE,我們不用進行過多的設置。
到這里,我們的Eclipse+MyEclipse開發環境就搭建完畢了!
參考資料:
http://www.webdn.com/web_file/program/jsp/0602080402/MyEclipse是Eclipse的一個插件,所以,你必須先安裝Eclipse才可以安裝MyEclipse。
MyEclipse是一個編譯器,要做JAVA程序,就要配置基本的JDK環境變量
一、安裝JDK
首先下載JDK 5.0(JDK 5.0的下載頁面為:
http://java.sun.com/j2se/1.5.0/download.jsp);然后運行JDK 5.0安裝程序jdk-1_5_0_06-windows-i586-p.exe,安裝過程中所有選項保持默認;最后配置JDK的環境變量:在“我的電腦”上點右鍵—>“屬性”—>“高級”—> “環境變量(N)”。
新建系統變量JAVA_HOME:C:\Program Files\Java\jdk1.5.0_06;
新建系統變量CLASSPATH:.;%JAVA_HOME%\lib;(注意:點號表示當前目錄,不能省略)
在系統變量Path的值的前面加入以下內容:%JAVA_HOME%\bin;(注意:這里的分號不能省略)
到這里,JDK安裝完畢。
注意:如果以后要安裝諸如Eclipse、Borland JBuilder、JCreator、IntelliJ IDEA等集成開發環境(IDE,Integrated Development Environment),應該在IDE中編譯運行一個簡單的HelloWorld程序,以保證IDE可以識別出JDK的位置。
二、安裝Tomcat
首先下載jakarta-tomcat-5.0.30.zip,之所以下載免安裝版的好處是可以使用多個Tomcat(jakarta-tomcat-5.0.30.zip的下載頁面為:
http://apache.linuxforum.net/tomcat/tomcat-5/v5.0.30/bin/);
然后將jakarta-tomcat-5.0.30.zip直接解壓到D盤根目錄:
最后配置Tomcat的環境變量:在“我的電腦”上點右鍵—>“屬性”—>“高級”—> “環境變量(N)”。
新建系統變量CATALINA_HOME:D:\jakarta-tomcat-5.0.30
在系統變量CLASSPATH的值的后面加入:%CATALINA_HOME%\common\lib;
在系統變量Path的值中"%JAVA_HOME%\bin;"的后面加入以下內容:%CATALINA_HOME%\bin;
到這里,Tomcat安裝完畢。
進行完一、二兩步的設置以后,各系統變量的值如下:
JAVA_HOME:C:\Program Files\Java\jdk1.5.0_06
CATALINA_HOME:D:\jakarta-tomcat-5.0.30
CLASSPATH:.;%JAVA_HOME%\lib;%CATALINA_HOME%\common\lib;
Path:%JAVA_HOME%\bin;%CATALINA_HOME%\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem
三、安裝Eclipse
首先下載eclipse-SDK-3.1.2-win32.zip(eclipse-SDK-3.1.2-win32.zip下載地址為:
http://www.eclipse.org/downloads/);
然后將eclipse-SDK-3.1.2-win32.zip直接解壓到D盤根目錄:
到這里, Eclipse安裝完畢。
四、安裝MyEclipse
首先下載EnterpriseWorkbenchInstaller_4.1.1GA_E3.1.exe(EnterpriseWorkbenchInstaller_4.1.1GA_E3.1.exe 的下載地址為:
http://www.myeclipseide.com/ContentExpress-display-ceid-10.html);
然后安裝EnterpriseWorkbenchInstaller_4.1.1GA_E3.1.exe。注意:安裝時候要選擇Eclipse的安裝路徑,其他選項保持默認。
安裝完畢之后,將MyEclipse安裝目錄下的features和plugins這2個目錄覆蓋到Eclipse的安裝目錄下。
最后將剛才安裝的 MyEclipse 卸載。
解釋一下上面這樣做的原因:因為MyEclipse是Eclipse的插件,所以只要把features和plugins這2個目錄覆蓋到Eclipse的安裝目錄,Eclipse就會自動認出這些插件。
到這里,MyEclipse安裝完畢。
五、破解MyEclipse
運行MyEclipse4.1.1注冊機MyEclipseKeyGen.exe,選擇MyEclipse的版本號,輸入注冊名,生成序列號。(MyEclipse4.x注冊機的下載地址為:
http://esoft.g8.com.cn/UploadFiles/2006-5/520753587.rar)
運行eclipse.exe(首次運行要求指定Workspace),依次點擊Window ----> Preferences ---->MyEclipse---->Subscription ----> Enter Subscription,輸入注冊名以及注冊機生成的注冊碼。
到這里,MyEclipse破解完畢。
六、指定Eclipse+MyEclipse的JRE
1.設定Eclipse+MyEclipse的JRE
一般情況下,Eclipse可以自動找到JRE,我們不用進行過多的設置。
到這里,我們的Eclipse+MyEclipse開發環境就搭建完畢了!
參考資料:
http://www.webdn.com/web_file/program/jsp/0602080402/MyEclipse是Eclipse的一個插件,所以,你必須先安裝Eclipse才可以安裝MyEclipse。
MyEclipse是一個編譯器,要做JAVA程序,就要配置基本的JDK環境變量
一、安裝JDK
首先下載JDK 5.0(JDK 5.0的下載頁面為:
http://java.sun.com/j2se/1.5.0/download.jsp);然后運行JDK 5.0安裝程序jdk-1_5_0_06-windows-i586-p.exe,安裝過程中所有選項保持默認;最后配置JDK的環境變量:在“我的電腦”上點右鍵—>“屬性”—>“高級”—> “環境變量(N)”。
新建系統變量JAVA_HOME:C:\Program Files\Java\jdk1.5.0_06;
新建系統變量CLASSPATH:.;%JAVA_HOME%\lib;(注意:點號表示當前目錄,不能省略)
在系統變量Path的值的前面加入以下內容:%JAVA_HOME%\bin;(注意:這里的分號不能省略)
到這里,JDK安裝完畢。
注意:如果以后要安裝諸如Eclipse、Borland JBuilder、JCreator、IntelliJ IDEA等集成開發環境(IDE,Integrated Development Environment),應該在IDE中編譯運行一個簡單的HelloWorld程序,以保證IDE可以識別出JDK的位置。
二、安裝Tomcat
首先下載jakarta-tomcat-5.0.30.zip,之所以下載免安裝版的好處是可以使用多個Tomcat(jakarta-tomcat-5.0.30.zip的下載頁面為:
http://apache.linuxforum.net/tomcat/tomcat-5/v5.0.30/bin/);
然后將jakarta-tomcat-5.0.30.zip直接解壓到D盤根目錄:
最后配置Tomcat的環境變量:在“我的電腦”上點右鍵—>“屬性”—>“高級”—> “環境變量(N)”。
新建系統變量CATALINA_HOME:D:\jakarta-tomcat-5.0.30
在系統變量CLASSPATH的值的后面加入:%CATALINA_HOME%\common\lib;
在系統變量Path的值中"%JAVA_HOME%\bin;"的后面加入以下內容:%CATALINA_HOME%\bin;
到這里,Tomcat安裝完畢。
進行完一、二兩步的設置以后,各系統變量的值如下:
JAVA_HOME:C:\Program Files\Java\jdk1.5.0_06
CATALINA_HOME:D:\jakarta-tomcat-5.0.30
CLASSPATH:.;%JAVA_HOME%\lib;%CATALINA_HOME%\common\lib;
Path:%JAVA_HOME%\bin;%CATALINA_HOME%\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem
三、安裝Eclipse
首先下載eclipse-SDK-3.1.2-win32.zip(eclipse-SDK-3.1.2-win32.zip下載地址為:
http://www.eclipse.org/downloads/);
然后將eclipse-SDK-3.1.2-win32.zip直接解壓到D盤根目錄:
到這里, Eclipse安裝完畢。
四、安裝MyEclipse
首先下載EnterpriseWorkbenchInstaller_4.1.1GA_E3.1.exe(EnterpriseWorkbenchInstaller_4.1.1GA_E3.1.exe 的下載地址為:
http://www.myeclipseide.com/ContentExpress-display-ceid-10.html);
然后安裝EnterpriseWorkbenchInstaller_4.1.1GA_E3.1.exe。注意:安裝時候要選擇Eclipse的安裝路徑,其他選項保持默認。
安裝完畢之后,將MyEclipse安裝目錄下的features和plugins這2個目錄覆蓋到Eclipse的安裝目錄下。
最后將剛才安裝的 MyEclipse 卸載。
解釋一下上面這樣做的原因:因為MyEclipse是Eclipse的插件,所以只要把features和plugins這2個目錄覆蓋到Eclipse的安裝目錄,Eclipse就會自動認出這些插件。
到這里,MyEclipse安裝完畢。
五、破解MyEclipse
運行MyEclipse4.1.1注冊機MyEclipseKeyGen.exe,選擇MyEclipse的版本號,輸入注冊名,生成序列號。(MyEclipse4.x注冊機的下載地址為:
http://esoft.g8.com.cn/UploadFiles/2006-5/520753587.rar)
運行eclipse.exe(首次運行要求指定Workspace),依次點擊Window ----> Preferences ---->MyEclipse---->Subscription ----> Enter Subscription,輸入注冊名以及注冊機生成的注冊碼。
到這里,MyEclipse破解完畢。
六、指定Eclipse+MyEclipse的JRE
1.設定Eclipse+MyEclipse的JRE
一般情況下,Eclipse可以自動找到JRE,我們不用進行過多的設置。
到這里,我們的Eclipse+MyEclipse開發環境就搭建完畢了!
參考資料:
http://www.webdn.com/web_file/program/jsp/0602080402/
posted @
2008-11-13 11:43 caihaibo 閱讀(532) |
評論 (0) |
編輯 收藏
在Windows Xp系統中,按“Alt+Ctrl+Delete”出現的是任務管理器,不是
安全對話框這樣不能鎖定計算機,可以打開控制面板,點擊“切換到經典視圖”
后選擇“用戶賬戶”,在選擇“更改用戶登錄或注銷方式”,不選“使用歡迎
屏幕”,然后確定。在按Alt+Ctrl+Delete”出現的是Windows安全對話框,點
“鎖定計算機”即可OK。
posted @
2008-11-12 13:33 caihaibo 閱讀(218) |
評論 (0) |
編輯 收藏
今天在導入一個工程時,編譯并打包到Tomcat后,發現出現java.lang.UnsupportedClassVersionError: Bad version number in .class file異常,檢查了一下我的myEclipse,發現不知道啥時候不小心將編譯器改成JDK6.0了,那個工程是從同事的機上拷貝過來的,用的編譯器是JDK5.0,試了一下,果然是這個問題引起。
那次在Linux上部署工程時也出現過因為版本不同引起的問題,那時我們用的IDE的編譯器是JDK5.0,而那臺Linux裝的是JDK6.0,部署后發現很多功能都出錯,看來有些東西還是得注意一下啊。
附,在myEclipse中改變編譯器的方法:Project->Properties->Java Compiler->Configure Workspace Setting,在彈出的頁面中可以進行設置。
posted @
2008-11-09 21:59 caihaibo 閱讀(282) |
評論 (1) |
編輯 收藏
手動安裝的tomcat沒有生成admin跟manager用戶,要進入tomcat的admin管理界面必須自己手動添加.
打開tomcat安裝目錄下的conf/tomcat-users.xml文件,在<tomcat-users>和</tomcat-user>中間添加:
<role rolename="manager"/>
<role rolename="admin"/>
和
<user username="manager" password="tomcat" roles="manager"/>
<user username="admin" password="tomcat" roles="admin"/>
其中user字段中的username和password就是你的用戶名跟密碼,添加完成后就可以用這個用戶名跟密碼登錄tomcat的admin以及manager頁面了.
http://localhost:8080/admin
http://localhost:8080/manager
懶人方法:
<user username="both" password="tomcat"
roles="manager,tomcat,role1"/>
直接添加到此處,下一次tomcat啟動時將自動添加一個manager用戶!
posted @
2008-11-09 21:15 caihaibo 閱讀(184) |
評論 (0) |
編輯 收藏
MyEclipse 6.0官方下載地址:
http://www.myeclipseide.com/module-htmlpages-display-pid-4.html
MyEclipse 6.0注冊序列號:
Subscriber:QQ24785490
Subscription Code:DLR8ZC-855551-65657857678050018
posted @
2008-11-05 18:19 caihaibo 閱讀(4016) |
評論 (9) |
編輯 收藏
mysql是我以前學習和練習所使用的數據,現在在工作中也在使用,之前公司里用oracle,我在做自己的東西的時候覺得用oracle太不方便,于是就找了mysql(當時也考慮過sqlserver,覺得還是沒有mysql小巧),從那時起我就開始接觸下面所說的幾種mysql客戶端工具了。
我接觸的mysql客戶端工具一共有4個,mysqlfront, mysqlyog, mysqlbrowser, ems mysql manager,其中mysqlbrowser是我最早使用的一個mysql客戶端工具(一年前),當時是在一個自己接的交友網站中使用mysql,于是就找到了這個mysqlbrowser,
mysqlbrowser的優點是簡單,及其的簡單,安裝之后能夠立刻上手,馬上就能使用的那種,布局也很簡陋,功能也很簡陋,簡單使用沒有問題,尤其是剛開始學習mysql的同學,可以嘗試一下。
接下來我使用的是ems,ems到了另外一個極端,強大,非常強大,表和字段的任何屬性都能隨意修改,那么它強大的同時必然帶來了使用的復雜,可以說剛開始 使用的時候很不習慣它的布局。它有一個我比較贊賞的優點,就是快捷鍵,它有很多快捷鍵,這一點和mysqlbrowser比有天壤之別。
我第三個遇到的mysql客戶端工具是mysqlfront,它給我的感覺是功能和易用性介于mysqlbrowser和ems之間,它有不少缺點,不如說無法修改表的一些屬性,和一些字段的屬性等等。
第四個就是mysqlyog,這個工具給我的感覺是介于mysqlbrowser和mysqlfront之間,總體感覺沒有mysqlfront強大。
通過我的一些認識,我覺得它們的排名是1mysqlbrowser,2mysqlyog,3mysqlfront,4ems。這是根據功能的強大與否來排名的。ems的功能是最強大,所以我現在一直在使用它。我也推薦大家使用ems mysql manager。ems有兩個版本,lite版(免費),professional(專業版),我一直使用的lite版,程序員而言,lite版已經完全夠用了。
posted @
2008-11-04 10:43 caihaibo 閱讀(181) |
評論 (0) |
編輯 收藏
模板是指在薄片塑料板上面寫字后挖空,再使用毛筆或色筆涂滿挖空部分,就能看到純手工而以不失工整的字樣,看到模板上的挖空形狀,馬上就知道最后會變出什么樣子的字,不過實際上所顯現出來的字樣還是要依所使用的畫筆種類而定.拿黑色簽字筆當畫筆,結果當然就是簽字筆的字樣;當用鉛筆來畫,得到的也只會是灰黑色的鉛筆字;如果用五顏六色的彩色筆,自然能創出讓人眼花的多色字.但是,無論使用哪種文具,制作出來的字樣都還是脫不了模板上已經固定的形狀。
下面我們用例子說明模板方法
程序示例類之間的關系

1.模板類,相當于我們上面提到的薄片塑料板
- package com.pattern.templateMethod;
-
-
-
-
-
-
- public abstract class AbstractDisplay {
-
- public abstract void open();
- public abstract void print();
- public abstract void close();
-
- public final void display() {
- open();
- for(int i=0; i < 5; i++) {
- print();
- }
- close();
- }
- }
package com.pattern.templateMethod;
/**
* 抽象類,充當模板角色
* @author administrator
*
*/
public abstract class AbstractDisplay {
//由子類實現的抽象方法
public abstract void open();
public abstract void print();
public abstract void close();
//抽象類實現的方法,final可以保證在子類不會被修改
public final void display() {
open(); //先open...
for(int i=0; i < 5; i++) { //反復輸出5次
print();
}
close(); //輸出完畢,close
}
}
2.字符類,輸出單個字符
- package com.pattern.templateMethod;
-
- public class CharDisplay extends AbstractDisplay {
- private char ch;
- public CharDisplay(char ch) {
- this.ch = ch;
- }
-
- public void open() {
- System.out.print("<<");
- }
- public void close() {
- System.out.println(">>");
- }
- public void print() {
- System.out.print(ch);
- }
-
- }
package com.pattern.templateMethod;
public class CharDisplay extends AbstractDisplay {
private char ch; //應輸出的字符
public CharDisplay(char ch) { //把構造函數傳遞過來的字符ch,存儲在字段內
this.ch = ch;
}
public void open() {
System.out.print("<<"); //輸出"<<"作為開始字符串
}
public void close() {
System.out.println(">>"); //輸出 ">>"作為結束字符串
}
public void print() {
System.out.print(ch); //輸出存儲在字段的字符
}
}
3.字符串類,輸出字符串
- package com.pattern.templateMethod;
-
-
-
-
-
- public class StringDisplay extends AbstractDisplay {
- private String string;
- private int width;
-
- public StringDisplay(String string) {
- this.string =string;
- width = string.getBytes().length;
- }
-
- public void open() {
- printLine();
- }
- public void print() {
- System.out.println("|"+string+"|");
- }
- public void close() {
- printLine();
- }
-
- public void printLine() {
- System.out.print("+");
- for(int i=0; i < width; ++i) {
- System.out.print("-");
- }
- System.out.println("+");
- }
- }
package com.pattern.templateMethod;
/**
*
* @author administrator
*/
public class StringDisplay extends AbstractDisplay {
private String string; //應輸出的字符串
private int width; //以byte為單位所求出的字符串的"長度"
public StringDisplay(String string) {
this.string =string;
width = string.getBytes().length;
}
public void open() { //打印頭裝飾字符串
printLine();
}
public void print() { //打印內容
System.out.println("|"+string+"|");
}
public void close() { //打印尾裝飾字符串
printLine();
}
public void printLine() {
System.out.print("+"); //輸出"+"號表示邊框位置
for(int i=0; i < width; ++i) {
System.out.print("-"); //當作線段
}
System.out.println("+"); //輸出"+"號表示邊框位置
}
}
4.測試類
- package com.pattern.templateMethod;
-
- public class Main {
- public static void main(String[] args) {
-
- AbstractDisplay d1 = new CharDisplay('A');
-
- AbstractDisplay d2 = new StringDisplay("Hello World");
-
-
- d1.display();
- d2.display();
- }
- }
package com.pattern.templateMethod;
public class Main {
public static void main(String[] args) {
//建立1個有'A'的CharDisplay的對象
AbstractDisplay d1 = new CharDisplay('A');
//建立1個有"Hello world"的StringDisplay的對象
AbstractDisplay d2 = new StringDisplay("Hello World");
//d1,d2都是AbstractDisplay的子類對象,可以調用繼承到的display()方法
d1.display();
d2.display();
}
}
輸出:
- <<AAAAA>>
- +-----------+
- |Hello World|
- |Hello World|
- |Hello World|
- |Hello World|
- |Hello World|
- +-----------+
<<AAAAA>>
+-----------+
|Hello World|
|Hello World|
|Hello World|
|Hello World|
|Hello World|
+-----------+
設計思想:
作為模板的方法定義在父類(父類為抽象類),而方法定義使用抽象方法,實現抽象方法的是子類,要在子類實現方法,才能決定具體的操作。如果在不同的子類執行不同實現就可以發展出不同的處理內容。不過,無論在哪個子類執行任何一種實現,處理的大致流程都還是要依照父類制定的方式。
posted @
2008-11-04 10:32 caihaibo 閱讀(385) |
評論 (0) |
編輯 收藏
1. 意圖:
為其他對象提供一種代理以控制對這個對象的訪問
2. 別名:
surrogate替身
3. 動機
按需創建, 替代對象
4. 適用性
* 遠程代理
* 虛代理
* 保護代理
* 智能指引
5. 結構
6. 實例
- package net.yeah.fanyamin.pattern.proxy;
-
-
-
-
- interface Greet {
- void sayHello(String name);
- void goodBye();
- }
-
- class GreetImpl implements Greet {
- public void sayHello(String name) {
- System.out.println("Hello " + name);
- }
- public void goodBye() {
- System.out.println("Good bye.");
- }
- }
-
- public class SimpleProxy implements Greet {
- private Greet greet = null;
-
- SimpleProxy(Greet greet) {
- this.greet = greet;
- }
-
- public void sayHello(String name) {
- System.out.println("--before method sayHello");
- greet.sayHello(name);
- System.out.println("--after method sayHello");
- }
-
- public void goodBye() {
- System.out.println("--before method goodBye");
- greet.goodBye();
- System.out.println("--after method goodBye");
- }
-
-
-
- public static void main(String[] args) {
- Greet greet = new SimpleProxy(new GreetImpl());
- greet.sayHello("walter");
- greet.goodBye();
-
- }
-
- }
package net.yeah.fanyamin.pattern.proxy;
/**
* @author walter
*/
interface Greet {
void sayHello(String name);
void goodBye();
}
class GreetImpl implements Greet {
public void sayHello(String name) {
System.out.println("Hello " + name);
}
public void goodBye() {
System.out.println("Good bye.");
}
}
public class SimpleProxy implements Greet {
private Greet greet = null;
SimpleProxy(Greet greet) {
this.greet = greet;
}
public void sayHello(String name) {
System.out.println("--before method sayHello");
greet.sayHello(name);
System.out.println("--after method sayHello");
}
public void goodBye() {
System.out.println("--before method goodBye");
greet.goodBye();
System.out.println("--after method goodBye");
}
/**
* @param args
*/
public static void main(String[] args) {
Greet greet = new SimpleProxy(new GreetImpl());
greet.sayHello("walter");
greet.goodBye();
}
}
利用JDK中的動態代理
-
-
-
- package net.yeah.fanyamin.pattern.proxy;
-
- import java.lang.reflect.InvocationTargetException;
- import java.lang.reflect.Method;
-
-
-
-
- public class DebugProxy implements java.lang.reflect.InvocationHandler {
-
- private Object obj;
-
- public static Object newInstance(Object obj) {
- return java.lang.reflect.Proxy.newProxyInstance(obj.getClass().getClassLoader(),
- obj.getClass().getInterfaces(), new DebugProxy(obj));
- }
-
- private DebugProxy(Object obj) {
- this.obj = obj;
- }
-
- public Object invoke(Object proxy, Method m, Object[] args) throws Throwable {
- Object result;
- try {
- System.out.println("--before method " + m.getName());
- result = m.invoke(obj, args);
- } catch (InvocationTargetException e) {
- throw e.getTargetException();
- } catch (Exception e) {
- throw new RuntimeException("unexpected invocation exception: " + e.getMessage());
- } finally {
- System.out.println("--after method " + m.getName());
- }
- return result;
- }
-
-
-
-
- public static void main(String[] args) {
- Greet greet = (Greet) DebugProxy.newInstance(new GreetImpl());
- greet.sayHello("walter");
- greet.goodBye();
- }
-
- }
動態代理確實很有價值,而且java的反射機制其實性能并不慢,只不過被代理的Object需要有個Interface就是了。
實際中,代理多用在訪問,權限控制
其實從類的實現表現形式來說,和裝飾模式,適配器模式,都比較相似,只不過具體實現意義不一樣
posted @
2008-11-04 10:20 caihaibo 閱讀(110) |
評論 (0) |
編輯 收藏
1. 以一個算術運算為例,傳統做法為:
java 代碼
- package org.common;
-
- public class Calculate {
-
- public String getResult(float a,float b,char c){
-
- float add = a+b;
- float sub = a-b;
- float mult = a*b;
- float division = a/b;
-
- switch(c){
- case '+':
- return "相加結果為:" + add;
- case '-':
- return "相減結果為:" + sub;
- case '*':
- return "相乘結果為:" + mult;
- case '/':
- return "相除結果為:" + division;
- default:
- return "出錯";
- }
- }
-
- }
java 代碼
- package org.common;
-
- public class Test {
-
- public static void main(String[] args){
- float a = 200;
- float b = 50;
- Calculate cal = new Calculate();
- System.out.println(cal.getResult(a, b, '+'));
- System.out.println(cal.getResult(a, b, '-'));
- System.out.println(cal.getResult(a, b, '*'));
- System.out.println(cal.getResult(a, b, '/'));
- System.out.println(cal.getResult(a, b, '('));
- }
-
- }
運行結果為:
相加結果為:250.0
相減結果為:150.0
相乘結果為:10000.0
相除結果為:4.0
出錯
2. 用策略模式來實現:
策略模式的用意是針對一組算法,將每一個算法封裝到具有共同接口的獨立的類中,從而使得它們可以相互替換。
策略模式使得算法可以在不影響到客戶端的情況下發生變化。使用策略模式可以把行為和環境分割開來。
環境類負責維持和查詢行為類,各種算法則在具體策略中提供。由于算法和環境獨立開來,算法的修改都不會影響環境和客戶端
策略模式:
由三部分組成
A: 抽象策略角色:策略類,通常由一個接口或者抽象類實現
B: 具體策略角色:包裝了相關的算法和行為
C: 環境角色:持有一個策略類的引用,最終給客戶端調用的。
一個抽象策略角色:
java 代碼
- package org.strategy;
-
-
-
- public abstract class AbstractStrategy {
-
- public abstract String calculate(float a,float b);
- }
幾個具體策略角色:
java 代碼
- package org.strategy;
-
-
-
- public class SubStrategy extends AbstractStrategy{
-
- public String calculate(float a,float b){
- float result = a-b;
- return "相減結果為:" + result;
- }
- }
java 代碼
- package org.strategy;
-
-
-
- public class AddStrategy extends AbstractStrategy{
-
- public String calculate(float a,float b){
- float result = a+b;
- return "相加結果為:" + result;
- }
- }
java 代碼
- package org.strategy;
-
-
-
- public class MultStrategy extends AbstractStrategy{
-
- public String calculate(float a,float b){
- float result = a*b;
- return "相乘結果為:" + result;
- }
- }
java 代碼
- package org.strategy;
-
-
-
- public class DivisionStrategy extends AbstractStrategy{
-
- public String calculate(float a,float b){
- float result = a/b;
- return "相除結果為:" + result;
- }
- }
環境角色:
java 代碼
- package org.strategy;
-
-
-
- public class ContextRole {
-
-
-
-
- private AbstractStrategy abstactStrategy;
-
- public ContextRole(AbstractStrategy abstactStrategy){
- this.abstactStrategy = abstactStrategy;
- }
-
- public String calculate(float a,float b) {
- String result = abstactStrategy.calculate(a, b);
- return result;
- }
- }
客戶端調用:
java 代碼
- package org.strategy;
-
-
-
- public class Test {
-
- public static void main(String[] args){
- float a = 200;
- float b = 25;
-
- ContextRole contextRole1 = new ContextRole(new AddStrategy());
- System.out.println(contextRole1.calculate(a, b));
-
- ContextRole contextRole2 = new ContextRole(new SubStrategy());
- System.out.println(contextRole2.calculate(a, b));
-
- ContextRole contextRole3 = new ContextRole(new MultStrategy());
- System.out.println(contextRole3.calculate(a, b));
-
- ContextRole contextRole4 = new ContextRole(new DivisionStrategy());
- System.out.println(contextRole4.calculate(a, b));
-
- }
-
- }
輸出結果為:
相加結果為:225.0
相減結果為:175.0
相乘結果為:5000.0
相除結果為:8.0
總結:
策略模式優點:
1.可以很方便的動態改變算法或行為
2.避免使用多重條件轉移語句
策略模式缺點:
1.客戶端必須知道所有的策略類,并自行決定使用哪一個策略類。
2.造成很多的策略類。
posted @
2008-11-04 09:38 caihaibo 閱讀(267) |
評論 (0) |
編輯 收藏