我已经学习了2个月的Java,我熟悉课程,继承以及一些关于摇摆的知识。 我见过一些专家'编码风格,我确实对它有点不熟悉。 例如: 1)
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 );
}
}
根据我之前的知识,如果你想创建一个类的实例,我见过的大部分风格如下:
Calendar cal = new Calendar();
然后调用方法,在这种情况下我认为它是这样的:
cal.getInstance();
我理解其余部分。这是否意味着我可以在创建类的实例时直接调用该方法?让我们说如果我有一个狗类,里面有一个名为' bark'的方法,我可以这样做:
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);
}
});
}
}
就像我之前的问题一样,但这次他创建了另一种初始化方法,并在构造函数中调用它,我发现它有点令人困惑。我也看过Derek Bananas youtube教程,他写了这样的代码:
this.setTitle...
this.setSize...
这意味着我也可以使用这个。'在initUI方法里面也是??
PS:如果你觉得我的问题是由于我缺乏学习,你能告诉我一些我可以谷歌的关键词吗?对不起,如果我的英语不好。谢谢。答案 0 :(得分:5)
你看到的是factory pattern。班级作者(无论是谁写过日历)决定,无论出于何种原因,他们都不想要这个课程。用户(在本例中为您)直接创建日历。
通常这是因为:
至于你的狗行:
Dog cutie = Dog.bark();
bark()是一个返回狗的方法的坏名字 - 非常不直观。 比方说,你的狗类非常复杂 - 它有年龄,性别,品种,颜色和大小。 每只狗必须拥有所有指定的。 你可以通过实现DogFactory来让开发人员更容易创建狗:
public class DogFactory {
public static Dog newDog() {
return new Dog(1, Sex.MALE, Breed.PUDLE, brown, 40);
}
}
相关的设计模式是the builder,其中使用构建器的代码可能如下所示:
Dog lassie = new DogBuilder().called("lassie").ofBreed(Breed.COLLIE).ofHeight(60).build();
构建器的内部实现比工厂稍微复杂一些