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

时间:2016-02-09 00:11:42

标签: 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 );
      }
    }

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

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:如果你觉得我的问题是由于我缺乏学习,你能告诉我一些我可以谷歌的关键词吗?对不起,如果我的英语不好。谢谢。

1 个答案:

答案 0 :(得分:5)

你看到的是factory pattern。班级作者(无论是谁写过日历)决定,无论出于何种原因,他们都不想要这个课程。用户(在本例中为您)直接创建日历。

通常这是因为:

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

    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();
    

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