2016-02-09 88 views
0

我一直在學習java 2個月,我熟悉類,繼承和關於swing的一點點。 我見過一些專家的編碼風格,我的確有點不熟悉。 例如: 1)關於java編碼風格的一些問題

import java.util.Calendar; 

    class testIni2{ 
     public static void main(String args[]){ 
     Calendar cal = Calendar.getInstance(); 

     int month = cal.get(Calendar.MONTH) + 1; 
     int day = cal.get(Calendar.DATE); 

     System.out.println("Today's date is" + month + " " + day); 
     } 
    } 

從我以前的知識,如果你想創建一個類的instace,大多數我見過的風格是象下面這樣:

Calendar cal = new Calendar(); 

其次調用方法,在這種情況下,我認爲它是這樣的:

cal.getInstance(); 

我理解它的其餘部分。這是否意味着我可以在創建類的實例時直接調用該方法?比方說,如果我有一個狗類和它裏面有一個叫「汪汪」的方法,我可以做這樣的事情:

Dog cutie = Dog.bark();  // Like this?? 

2)http://zetcode.com/tutorials/javaswingtutorial/firstprograms/

我從這個網站閱讀有關擺動教程,另一個關於它的編碼風格的問題。

import java.awt.EventQueue; 
import javax.swing.JFrame; 

public class SimpleEx extends JFrame { 

    public SimpleEx() { 

     initUI(); 
    } 

    private void initUI() { 

     setTitle("Simple example"); 
     setSize(300, 200); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

    public static void main(String[] args) { 

     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       SimpleEx ex = new SimpleEx(); 
       ex.setVisible(true); 
      } 
     }); 
    } 
} 

正如同我剛纔的問題,但這個時候,他創造了初始化,並調用它,我發現它有點混亂構造函數中的另一種方法。我也看到德里克香蕉YouTube的教程和他寫這樣的代碼:「這個」

this.setTitle...  
this.setSize... 

這意味着我也可以用在initUI方法裏面呢? PS:如果你覺得我的問題是由於我缺乏學習,你能告訴我一些關鍵詞,我可以谷歌它嗎?對不起,如果我的英語不好。謝謝。

+0

['Calendar'](http://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html)不有一個公共構造函數。是的,你可以在任何實例方法中使用'this.'。 –

+0

你在找什麼叫做「靜態方法」。 – biziclop

+0

對於你的問題'狗可愛= Dog.bark();'簡短的答案是否定的,除非方法bark()是靜態的,並且還返回Dog類的實例。 –

回答

5

你看到的是factory pattern。班級作者(編寫日曆的人)決定,無論出於何種原因,他們都不希望班級的用戶(在這種情況下)直接創建日曆。

通常這是因爲:

  1. 還有各種掛曆,哪一個你得到的是基本上不關你的:-)
  2. 可能建立一個新的日曆是一個大量的工作,該庫只有一個,所以每個調用工廠方法的人都會得到相同的結果。
  3. 構建日曆對於大多數凡人來說太複雜了。

爲你的狗行:

Dog cutie = Dog.bark(); 

樹皮()可以返回一個狗的方法的壞名聲 - 非常直觀。例如, 可以說,例如,您的Dog類非常複雜 - 它具有年齡,性別,品種,顏色和尺寸。 和每隻狗都必須具備所有指定的。

public class DogFactory { 
    public static Dog newDog() { 
     return new Dog(1, Sex.MALE, Breed.PUDLE, brown, 40); 
    } 
} 

相關的設計模式將the builder,其中使用Builder代碼看起來是這樣的:

Dog lassie = new DogBuilder().called("lassie").ofBreed(Breed.COLLIE).ofHeight(60).build(); 

的 你既可以由實施DogFactory更容易地開發出狗建設者的內部實現比工廠稍微複雜

+0

如果你添加一個關於他的行'狗可愛= Dog.bark();':)的筆記會更好: –

+0

感謝雷泰。第二個也是工廠模式嗎?我認爲它關於設計模式的一切權利? – nicklowkc

+0

@nicklowkc - 我不明白你的意思是「第二個」。你能否詳細說明一下? – radai