2016-02-09 50 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