程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java中單例形式的7種寫法

Java中單例形式的7種寫法

編輯:關於JAVA

Java中單例形式的7種寫法。本站提示廣大學習愛好者:(Java中單例形式的7種寫法)文章只能為提供參考,不一定能成為您想要的結果。以下是Java中單例形式的7種寫法正文


說明的不錯,應當明白了很多 
ruby symbol詳解
原由
比來在進修ruby on rails,切實其實是一個優良的數據庫開辟框架。但在進程中,發明在視圖文件夾中的rhtml文件裡有年夜量的相似於以下的語句:
<td><%= link_to recipe.title, :action => “show”, :id => 1 %></td>
這是一個指向鏈接,假如沒有冒號這句話的意思很好懂得:這是一個指向http://127.0.0.1:3000/recipe/show/1的銜接,也就是“顯示”數據庫表recipe中“id”為1的條目標信息,但讓人不解的是action和id後面的冒號,它們是干什麼用的? 

ruby面向對象特征的一個缺陷
ruby中,一切皆是對象。就一個簡略的字符串舉例:
ruby -e ‘puts “hello world”.class'
String
這裡打印了”hello world”的字符串所屬的類,成果顯示它是一個String對象的實例。我們還可以顯示它的對象號。
ruby -e ‘puts “hello world”.object_id'
41436168
ruby一貫標榜本身是完整的面向對象的緣由就在於此,它切實其實做的很完全。然則凡事有好就有壞,一個對象占用的內存空間明顯會比純潔的變量年夜很多,當法式中觸及到年夜量的字符串時,一個ruby法式會占用過量的內存。舉個例子說:
我們用hash列表來存儲歌曲的信息
song1 = { ‘title' => ‘used to love you', ‘artist' => ‘john legend'}
song2 = { ‘title' => ‘i still', ‘artist' => ‘backstreet boys'}
#……
#許多歌,這裡只用兩首
for i in 1..2
 thesong=”song”+i.to_s
 eval <<-PROC
 #{thesong}.each_key { |key| puts key.object_id.to_s }
 PROC
end
成果:
41436144
41436408
41435904
41436000
由於object_id各不雷同,在hash表中的各個key都是自力的String對象,即便內容雷同(如'title'),ruby照樣將其視為分歧的對象,如許就無故地占用了很多內存。但現實上,年夜多半情形下,我們僅將hash中的key視為字段罷了,不會觸及到String類的辦法,ruby主動將其設置為對象有殺雞用牛刀之嫌。 

symbol是甚麼
直譯來講就是“符號”,在ruby就是形如:action如許的,一個冒號後跟一段字符串。明顯,依據“一切都是對象”定律,它也是一個對象。
ruby -e ‘ puts :action.class ‘
Symbol
這個對象存在的意義在於,它處理了“同內容字符串,分歧對象”帶來的過量占用內存的成績。簡略的說:action代表了'action'字符串,這裡說的是字符串,不是字符串對象。
ruby -e ‘ puts :action ‘
action
更確實的講就是一個symbol對象代表該對象的冒號後的字符串。
ruby -e ‘ puts :action ‘
action
ruby -e ‘ puts :”hello world” ‘ 
hello world
一切同內容的字符串只須要一個標志對象便可以取代,如許削減了不用要的對象樹立和內存占用。然則,正如我強調的“symbol代表的是字符串,不是對象”,是以不要願望標志可使用String類的諸如capitalize,center等辦法,假如應用的話只會獲得提醒辦法不決義的毛病申報:
ruby -e ‘ puts :action.capitalize ‘ 
-e:1: undefined method ‘capitalize' for :action:Symbol' (NoMethodError)
榮幸的是,symbol供給了轉換函數to_s用來生成一個字符串對象,它會提取字符串內容並將其進級為對象。
ruby -e ‘ puts :action.to_s.capitalize ‘ 
Action
別的,很主要的一點是,symbol沒有賦值辦法,換句話說symbol一旦界說,將不克不及轉變。
ruby -e ‘ :action=”hello” ‘ 
syntax error
很遺憾,即便應用了to_s,賦值仍然沒法順遂停止,由於ruby會以為“to_s=”是一個不決義函數。除非明白地為被轉換生成的字符串對象指定一個援用(但現實上在復制以後該銜接的指向又產生了變更):
:action
myaction=:action.to_s
myaction=”lala”
puts myaction
成果:
lala
怎樣應用symbol
任何可使用symbol的處所都可使用與之向對應的字符串對象。在rails中有樹立相似javabean的辦法:
attr_reader :action
它樹立了一個讀取實例變量@action的辦法,也能夠寫成如許:
attr_reader “action”
反之,只需
字符串在法式運轉進程中不消轉變
字符串不用應用String類辦法
那末我們可以寧神用symbol來取代字符串對象,從而年夜年夜削減內存的占用,在rails中尤其顯著。由於須要頻仍地在各個掌握辦法和頁面之間跳轉和傳出數據,年夜量的辦法名由symbol來取代,及勤儉了內存也進步了運轉速度。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved