javatouml
① java中的委託
委託模式是軟體設計模式中的一項基本技巧。在委託模式中,有兩個對象參與處理同一個請求,接受請求的對象將請求委託給另一個對象來處理。委託模式是一項基本技巧,許多其他的模式,如狀態模式、策略模式、訪問者模式本質上是在更特殊的場合採用了委託模式。委託模式使得我們可以用聚合來替代繼承,它還使我們可以模擬mixin。
「委託」在C#中是一個語言級特性,而在Java語言中沒有直接的對應,但是我們可以通過動態代理來實現委託!代碼如下:
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/*
* @author Liusheng
* 實現「委託」模式,用戶需要實現InvocationHandler介面;
* 參考:http://www.uml.org.cn/j2ee/200411036.htm
*/
public abstract class Delegator implements InvocationHandler {
//--------------------------------------------
protected Object obj_orgin = null; //原始對象
protected Object obj_proxy = null; //代理對象
//--------------------------------------------
public Delegator() {
}
public Delegator(Object orgin) {
this.createProxy(orgin);
}
/*
* 完成原始對象和委託對象的實例化
* @param orgin 原始對象實例
*/
protected Object createProxy(Object orgin) {
obj_orgin = orgin;
//下面語句中orgin.getClass().getClassLoader()為載入器,orgin.getClass().getInterfaces()為介面集
obj_proxy = Proxy.newProxyInstance(orgin.getClass().getClassLoader(), orgin.getClass().getInterfaces(), this); //委託
return obj_proxy;
}
/*
* 對帶有指定參數的指定對象調用由此 Method 對象表示的底層方法,具體請參見Java API
* @param args 參數
* @param method 方法類實例
*/
protected Object invokeSuper(Method method, Object[] args) throws Throwable {
return method.invoke(obj_orgin, args);
}
//--------------實現InvocationHandler介面,要求覆蓋------------
//下面實現的方法是當委託的類調用toString()方法時,操作其他方法而不是該類默認的toString(),這個類的其他方法則不會。
public Object invoke(Object obj, Method method, Object[] args) throws Throwable {
// 預設實現:委託給obj_orgin完成對應的操作
if (method.getName().equals("toString")) { //對其做額外處理
return this.invokeSuper(method, args) + "$Proxy";
} else { //注意,調用原始對象的方法,而不是代理的(obj==obj_proxy)
return this.invokeSuper(method, args);
}
}
}
下面的代碼,則是作為一個委託的例子,實現Map的功能。
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Hashtable;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.bs2.core.UtilLog;
/**
* @author Liusheng
* 本代碼主要用於演示RelegateTo的使用方法
*/
public class Delegator4Map extends Delegator {
private static Log _log = LogFactory.getLog(Delegator4Map.class);
private Map orginClass = null; //原始對象
private Map proxyClass = null; //代理對象
public Map getOrgin() {
return orginClass;
}
public Map getProxy() {
return proxyClass;
}
public Delegator4Map(Map orgin) {
super(orgin);
orginClass = orgin;
proxyClass = (Map) super.obj_proxy;
}
public Object invoke(Object obj, Method method, Object[] args) throws Throwable {
if (method.getName().equals("size")) { //修改size處理邏輯
Object res2 = new Integer(-1);
System.out.println("調用委託的方法");
return res2;
} else {
System.out.println("調用原始的方法");
return super.invoke(obj, method, args);
}
}
public static void main(String[] args) throws IOException {
Delegator4Map rtm = new Delegator4Map(new Hashtable());
Map m = rtm.getProxy();
m.size();
}
}
② 什麼是 java SMC框架
SMC - the State Machine Compiler(狀態機編譯器)
是一個用來將存儲在 sm 文件中的狀態機定義編譯成各種語言的代碼,包括:C, C++, C#, [incr Tcl], Groovy, Java, Lua, Objective-C, Perl, PHP, Python, Ruby, Scala, VB.net 等。...
程序的狀態處理幾乎是每個應用系統都需要做的事情,而且在邏輯控制中處於非常重要的角色,一般來講,設計得好的系統,都會有一套自己的狀態維護機制 ——狀態機,狀態機無非就是一個switch case的封裝,以及log記錄,隨著狀態的逐漸復雜以及需求的改變,最開始設計的狀態機可能會面臨面目全非的修改,通過一個簡單的配置,可視化的檢查,是提高編程效率、降低風險的好辦法。SMC就是提供一個配置文件——UML狀態圖——JAVA(或其他語言)代碼生成的軟體。
按照官方的說法,SMC目前支持11種語言的代碼自動生成:
SMC currently supports ten programming languages:
1. C,
2. C++,
3. C#,
4. Java,
5. Lua,
6. Objective-C,
7. Perl,
8. Python,
9. Ruby,
10. [incr Tcl] and
11. VB.Net.
SMC官方網站:http://smc.sourceforge.net/
下載最新的SMC包:smc_5_0_0.zip,設置環境變數:
+ Add the full path to .../Smc/bin to your PATH environment variable.
+ Add the full path to statemap.jar to your CLASSPATH environment variable.
+ Add the full path to .../Smc/lib to your TCLLIBPATH environment variable.
SmcLogo
③ Java培訓班一般都教什麼內容
ava培訓時間多久是和你目前的基礎情況、學習的方式(看視頻還是面授)、每天投入的時間相關的。如果你有Java基礎,選擇的是全日制面授課程,而且是996那種,那麼是可能在4個月學會Java並找到一份Java開發工作的;如果你是0基礎,即使是參加996的面授課,99%都是需要5-6個月才能學會的。
現在大部分的Java培訓機構的費用都在一萬七到兩萬之間,低於一萬學費的Java培訓機構是少之又少,所以與其糾結於費用問題,不如看看哪個培訓機構性價比更高。選擇培訓機構可以從培訓機構的綜合實力、課程體系、就業保障這
④ 請問Java的學習步驟
Java前景是很不錯的,像Java這樣的專業還是一線城市比較好,師資力量跟得上、就業的薪資也是可觀的,學習Java可以按照路線圖的順序,
0基礎學習Java是沒有問題的,關鍵是找到靠譜的Java培訓機構,你可以深度了解機構的口碑情況,問問周圍知道這家機構的人,除了口碑再了解機構的以下幾方面:
1. 師資力量雄厚
要想有1+1>2的實際效果,很關鍵的一點是師資隊伍,你接下來無論是找個工作還是工作中出任哪些的人物角色,都越來越愛你本身的技術專業java技術性,也許的技術專業java技術性則絕大多數來自你的技術專業java教師,一個好的java培訓機構必須具備雄厚的師資力量。
2. 就業保障完善
實現1+1>2效果的關鍵在於能夠為你提供良好的發展平台,即能夠為你提供良好的就業保障,讓學員能夠學到實在實在的知識,並向java學員提供一對一的就業指導,確保學員找到自己的心理工作。
3. 學費性價比高
一個好的Java培訓機構肯定能給你帶來1+1>2的效果,如果你在一個由專業的Java教師領導並由Java培訓機構自己提供的平台上工作,你將獲得比以往更多的投資。
希望你早日學有所成。
⑤ JAVAEE是什麼與JAVA 有什麼區別
AVAEE是指java enterprise edition,java企業版,多用於企業級開發,包括web開發等等很多組建;
Java和JavaEE區別:
1. Java是一種可以撰寫跨平台應用軟體的面向對象的程序設計語言。Java 技術具有卓越的通用性、高效性、平台移植性和安全性,廣泛應用於PC、數據中心、游戲控制台、科學超級計算機、行動電話和互聯網,同時擁有全球最大的開發者專業社群。正式成立於1995年,廣泛應用於人們的生活、工作、娛樂等等方面。
2. Java分為三個版本:Java SE(標准版)、Java EE(企業版)、Java ME(微型版)。其中JavaSE就是大家學JavaEE和JavaME的基礎,換而言之學Java先從JavaSE開始,JavaSE 包含了支持 Java Web 服務開發的類,JavaEE是企業最常用的用於企業級開發應用的,Java ME主要是移動段的開發應用。
3. 通過以上,Java和JavaEE的區別在哪,就特別的明顯了。那麼為什麼很多培訓主打JavaEE培訓呢?是因為JavaEE在Java中,比JavaSE和JavaME應用更加廣泛,價值更高,所以很多的培訓機構就直接主打JavaEE培訓,不過其他兩個方面的Java知識也是要大致掌握的。
(5)javatouml擴展閱讀
Java EE是 J2EE的一個新的名稱,之所以改名,目的還是讓大家清楚J2EE只是Java企業應用.隨著WEB和EJB容器概念誕生,使得軟體應用業開始擔心SUN的夥伴們是否還在Java平台上不斷推出翻新的標准框架,致使軟體應用業的業務核心組件架構無所適從,從一直以來是否需要EJB的討論聲中說明了這種彷徨。