关于java编码风格的一些问题

nic*_*wkc 0 java eclipse swing

我已经学习了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 );
      }
    }
Run Code Online (Sandbox Code Playgroud)

根据我之前的知识,如果你想创建一个类的实例,我见过的大部分风格如下:

Calendar cal = new Calendar();
Run Code Online (Sandbox Code Playgroud)

然后调用方法,在这种情况下我认为它是这样的:

cal.getInstance();
Run Code Online (Sandbox Code Playgroud)

我理解其余部分.这是否意味着我可以在创建类的实例时直接调用该方法?让我们说如果我有一个狗类,里面有一个叫做'bark'的方法,我可以这样做:

Dog cutie = Dog.bark();      // Like this??
Run Code Online (Sandbox Code Playgroud)

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);
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

就像我之前的问题一样,但这次他创建了另一种初始化方法,并在构造函数中调用它,我发现它有点令人困惑.我也看过Derek Bananas youtube教程,他写了这样的代码:

this.setTitle...     
this.setSize...
Run Code Online (Sandbox Code Playgroud)

这意味着我也可以使用'this'.在initUI方法里面呢?

PS:如果你觉得我的问题是由于我缺乏学习,你能告诉我一些我可以谷歌的关键词吗?对不起,如果我的英语不好.谢谢.

rad*_*dai 5

你所看到的是工厂模式.班级作者(无论是谁写过日历)决定,无论出于何种原因,他们都不希望班级用户(在这种情况下,你)直接创建日历.

通常这是因为:

  1. 有各种各样的日历,你得到的基本上没有你的业务:-)
  2. 也许建立一个新的日历是很多工作,图书馆只有一个,所以每个调用工厂方法的人都得到同一个.
  3. 建立一个日历对于大多数凡人来说都太复杂了.

至于你的狗线:

Dog cutie = Dog.bark();
Run Code Online (Sandbox Code Playgroud)

bark()是一个返回狗的方法的坏名字 - 非常不直观.比方说,你的狗类很复杂 - 它有年龄,性别,品种,颜色和大小.每只狗必须拥有所有指定的.您可以通过实现DogFactory让开发人员更容易创建狗:

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

相关的设计模式将是构建器,其中使用构建器的代码可能如下所示:

Dog lassie = new DogBuilder().called("lassie").ofBreed(Breed.COLLIE).ofHeight(60).build();
Run Code Online (Sandbox Code Playgroud)

构建器的内部实现比工厂稍微复杂一些