java模板方法模式
A. 在JAVA中是如何體現C++的函數模板這種機制的
很不好意思,Java的特性比C++少得多。Java不支持模板。只支持很少的類似於C++模板的語法來實現很有限的泛型編程。
Java對泛型編程的支持也是最近才加進去的,而且支持的很不好。你就不用指望能像C++那樣用它了。
Java是一個非常純粹的OOP語言,它天生就是相對動態的、後期的,編譯期處理的信息非常少,這和C++強靜態的特性是完全相反的。
Java的絕大部分類型信息都屬於RTTI,也就是在運行時動態獲取,不像C++是在編譯期由編譯器推導的,所以Java基本上不可能支持C++那樣靈活的模板。
Java的泛型也是,說白了只是個障眼法,用類似C++那樣的模板語法來包裝了其面向對象動態cast的本質而已。
舉例說,java中的Vector<int>,你給裡面保存int的時候,每一個int都是先被包裝成一個Integer對象然後塞進去,取出來的時候是先取出Object對象,轉換成Integer對象,然後再從裡面取出int這個整數,繞了很大一個彎子。
雖然從代碼上寫的和C++差不多都很簡潔,但是實際的效率和C++差了n個數量級。這點上實在是比較惡心,C#都做得比它好,C#至少對於值類型還是會實例化代碼的。
Java天生就是一個鼓勵動態化、運行期化、OOP化的一個語言,所以它不適合使用C++中那些泛型編程的範式來設計程序。你如果能夠忍受Java的裝箱拆箱的巨大效率損失,你可以用OOP的方式來實現那種同一個函數服務多種類型的想法,但是的確很低效。
B. java一共有多少種模式,分別是啥啊謝謝大家幫忙
轉載//////////////
Java中的23種設計模式:
Factory(工廠模式), Builder(建造模式), Factory Method(工廠方法模式),
Prototype(原始模型模式),Singleton(單例模式), Facade(門面模式),
Adapter(適配器模式), Bridge(橋梁模式), Composite(合成模式),
Decorator(裝飾模式), Flyweight(享元模式), Proxy(代理模式),
Command(命令模式), Interpreter(解釋器模式), Visitor(訪問者模式),
Iterator(迭代子模式), Mediator(調停者模式), Memento(備忘錄模式),
Observer(觀察者模式), State(狀態模式), Strategy(策略模式),
Template Method(模板方法模式), Chain Of Responsibleity(責任鏈模式)
工廠模式:工廠模式是一種經常被使用到的模式,根據工廠模式實現的類可以根據提供的數據生成一組類中某一個類的實例,通常這一組類有一個公共的抽象父類並且實現了相同的方法,但是這些方法針對不同的數據進行了不同的操作.首先需要定義一個基類,該類的子類通過不同的方法實現了基類中的方法.然後需要定義一個工廠類,工廠類可以根據條件生成不同的子類實例.當得到子類的實例後,開發人員可以調用基類中的方法而不必考慮到底返回的是哪一個子類的實例.
C. java可以實現c語言的模板功能嗎
1、java是純面向對象的語言(main都是寫到類里的),所以沒有原生的模板功能。
2、使用「模板模式」可以實現類似的效果,這也是java里最常用的模式之一。
以下是一篇教程:
模板方法模式的結構
模板方法模式是所有模式中最為常見的幾個模式之一,是基於繼承的代碼復用的基本技術。
模板方法模式需要開發抽象類和具體子類的設計師之間的協作。一個設計師負責給出一個演算法的輪廓和骨架,另一些設計師則負責給出這個演算法的各個邏輯步驟。代表這些具體邏輯步驟的方法稱做基本方法(primitive method);而將這些基本方法匯總起來的方法叫做模板方法(template method),這個設計模式的名字就是從此而來。
模板方法所代表的行為稱為頂級行為,其邏輯稱為頂級邏輯。模板方法模式的靜態結構圖如下所示:
這里涉及到兩個角色:
抽象模板(Abstract Template)角色有如下責任:
■定義了一個或多個抽象操作,以便讓子類實現。這些抽象操作叫做基本操作,它們是一個頂級邏輯的組成步驟。
■定義並實現了一個模板方法。這個模板方法一般是一個具體方法,它給出了一個頂級邏輯的骨架,而邏輯的組成步驟在相應的抽象操作中,推遲到子類實現。頂級邏輯也有可能調用一些具體方法。
具體模板(Concrete Template)角色又如下責任:
■實現父類所定義的一個或多個抽象方法,它們是一個頂級邏輯的組成步驟。
■每一個抽象模板角色都可以有任意多個具體模板角色與之對應,而每一個具體模板角色都可以給出這些抽象方法(也就是頂級邏輯的組成步驟)的不同實現,從而使得頂級邏輯的實現各不相同。
源代碼
抽象模板角色類,abstractMethod()、hookMethod()等基本方法是頂級邏輯的組成步驟,這個頂級邏輯由templateMethod()方法代表。
{
/**
*模板方法
*/
publicvoidtemplateMethod(){
//調用基本方法
abstractMethod();
hookMethod();
concreteMethod();
}
/**
*基本方法的聲明(由子類實現)
*/
();
/**
*基本方法(空方法)
*/
protectedvoidhookMethod(){}
/**
*基本方法(已經實現)
*/
(){
//業務相關的代碼
}
}
具體模板角色類,實現了父類所聲明的基本方法,abstractMethod()方法所代表的就是強制子類實現的剩餘邏輯,而hookMethod()方法是可選擇實現的邏輯,不是必須實現的。
{
//基本方法的實現
@Override
publicvoidabstractMethod(){
//業務相關的代碼
}
//重寫父類的方法
@Override
publicvoidhookMethod(){
//業務相關的代碼
}
}
模板模式的關鍵是:子類可以置換掉父類的可變部分,但是子類卻不可以改變模板方法所代表的頂級邏輯。
每當定義一個新的子類時,不要按照控制流程的思路去想,而應當按照「責任」的思路去想。換言之,應當考慮哪些操作是必須置換掉的,哪些操作是可以置換掉的,以及哪些操作是不可以置換掉的。使用模板模式可以使這些責任變得清晰。
D. java常用的的設計模式和開發模式都有哪些
設計模式主抄要分三個類型、創建襲型、結構型和行為型。設計模式分:3種類型及23種模式。
JAVA中的開發模式:MVC是一個很常用的程序開發設計模式,M-Model(模型):封裝應用程序的狀態;V-View(視圖):表示用戶界面;C-Controller(控制器):對用戶的輸入作出反應,創建並設置模型。
(4)java模板方法模式擴展閱讀
創建型模式:單例模式、抽象工廠模式、建造者模式、工廠模式、原型模式。
結構型模式:適配器模式、橋接模式、裝飾模式、組合模式、外觀模式、享元模式、代理模式。
行為型模式:模版方法模式、命令模式、迭代器模式、觀察者模式、中介者模式、備忘錄模式、解釋器模式(Interpreter模式)、狀態模式、策略模式、職責鏈模式(責任鏈模式)、訪問者模式。
E. java模板模式、為什麼沒列印方法
你把代碼貼出來,這圖片格式的。。。
你調用一下g.timer();試試。
F. java開發模式有哪些
建議參考:Java設計模式
Java設計模式
一:創建型模式
工廠方法內,抽象工容廠,建造者模式,單態模式,原型模式
二:構造型模式
適配器模式,橋接模式,組合模式,裝飾模式,外觀模式
享元模式,代理模式
三:行為型模式
責任鏈模式,命令模式,解釋器模式,迭代器模式,中介者模式
備忘錄模式,觀察者模式,狀態模式,策略模式,模版方法,訪問模式
G. Java中23種設計模式,哪些是必須了解的
抽象工制廠模式(Abstract Factory Pattern)
責任鏈模式(Chain of Responsibility Pattern)
代理模式(Proxy Pattern)
命令模式(Command Pattern)
觀察者模式(Observer Pattern)
我就會這幾個,看懂很容易,真的要明白其中的妙處就很難, 別貪多,搞明白一個就很有用的。
H. 如何理解java中回調機制和模板機制
即回調就是體現在你的同學又反過來撥打你的號碼。 拿這個例子類比Ajax中的回調機制以及Spring中HibernateTemplate用到的回調+模板機制,可以更容易地理解回調機制。 Ajax代碼:Java代碼 functiontest{if(window.ActiveXObject){xmlHttp=newActiveXObject( Microsoft.XMLHTTP);}elseif(window.XMLHttpRequest){xmlHttp=newXMLHttpRequest();}xmlHttp.onreadystatechange=callback; xmlHttp.open(…); xmlHttp.send(null);} functioncallback{} 其中xmlHttp.onreadystatechange = callback 就是表示在state改變時調用callback函數,而這個callback就是一個回調函數。類比:xmlHttp發出請求就相當於你打電話給你的同學,xmlHttp不知道state何時發生變化,就相當於你不知道你的同學何時能解決問題。Callback函數就相當於你的電話號碼, state發生變化時會調用callback函數,同樣你的同學解決問題後會打電話通知你。 Spring中HibernateTemplate的回調機制與模板方法 HibernateTemplaet的源碼很復雜,我們可以寫一段簡單的代碼來模擬一下:Java代碼interfaceCallBack{publicvoiddoCRUD();}publicclassHibernateTemplate{publicvoidexecute(CallBackaction){ getConnection(); action.doCRUD(); releaseConnection();}publicvoidadd(){execute(newCallBack(){publicvoiddoCRUD(){System.out.println( 執行add操作...);}});}publicvoiddelete(){execute(newCallBack(){publicvoiddoCRUD(){System.out.println( 執行delete操作...);}});}publicvoidgetConnection(){ System.out.println( 獲得連接...);}publicvoidreleaseConnection(){ 釋放連接...);}}類比:execute方法可以體現出模板模式。以add方法為例,調用execute方法就相當於你打電話給你的同學,但是你的同學說需要時間,就像execute方法需要首先獲得連接一樣,於是你把CallBack匿名類傳遞給它,在它獲得連接之後會執行你的add操作,這就相當於你把電話號碼告訴你的同學,他解決問題之後再打給你一樣。