关于java编码风格的几个问题

关于java编码风格的几个问题,java,eclipse,swing,Java,Eclipse,Swing,我学习java已经有2个月了,我对类、继承和swing都很熟悉。 我见过一些专家的编码风格,我确实觉得有点不熟悉。 例如: (一) 根据我之前的知识,如果您想创建一个类的Instance,我看到的大多数样式如下所示: Calendar cal = new Calendar(); 在调用方法之后,在本例中,我认为是这样的: cal.getInstance(); Dog cutie = Dog.bark(); // Like this?? this.setTitle...

我学习java已经有2个月了,我对类、继承和swing都很熟悉。 我见过一些专家的编码风格,我确实觉得有点不熟悉。 例如: (一)

根据我之前的知识,如果您想创建一个类的Instance,我看到的大多数样式如下所示:

Calendar cal = new Calendar();
在调用方法之后,在本例中,我认为是这样的:

cal.getInstance();
Dog cutie = Dog.bark();      // Like this??
this.setTitle...     
this.setSize...
Dog lassie = new DogBuilder().called("lassie").ofBreed(Breed.COLLIE).ofHeight(60).build();
剩下的我都明白了。这是否意味着在创建类的实例时可以直接调用该方法?假设我有一个dog类,其中有一个名为“bark”的方法,我可以这样做:

cal.getInstance();
Dog cutie = Dog.bark();      // Like this??
this.setTitle...     
this.setSize...
Dog lassie = new DogBuilder().called("lassie").ofBreed(Breed.COLLIE).ofHeight(60).build();
(二)

我在这个网站上读了一篇关于swing的教程,还有一个关于它的编码风格的问题

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的youtube教程,他写的代码如下:

cal.getInstance();
Dog cutie = Dog.bark();      // Like this??
this.setTitle...     
this.setSize...
Dog lassie = new DogBuilder().called("lassie").ofBreed(Breed.COLLIE).ofHeight(60).build();
这意味着我也可以在initUI方法中使用“this.”

如果你觉得我的问题是因为我缺乏学习,你能告诉我一些我可以用谷歌搜索的关键词吗?对不起,如果我的英语不好。谢谢你。

你看到的是。类作者(编写日历的人)决定,无论出于何种原因,他们都不希望类的用户(在本例中是您)直接创建日历

这通常是因为:

  • 有各种各样的日历,哪种日历基本上不关你的事:-)
  • 也许构建一个新的日历需要很多工作,而库中只有一个日历,所以调用factory方法的每个人都会得到相同的日历
  • 制作日历对于大多数凡人来说太复杂了
  • 至于你的狗线:

    Dog cutie = Dog.bark();
    
    对于返回dog(非常不直观)的方法来说,bark()是个坏名字。 比如说,你的狗的种类非常复杂——它有年龄、性别、品种、颜色和大小。 每只狗都必须有所有指定的。 通过实现DogFactory,开发者可以更轻松地创建狗:

    public class DogFactory {
       public static Dog newDog() {
          return new Dog(1, Sex.MALE, Breed.PUDLE, brown, 40);
       }
    }
    
    一个相关的设计模式是,使用生成器的代码可以如下所示:

    cal.getInstance();
    
    Dog cutie = Dog.bark();      // Like this??
    
    this.setTitle...     
    this.setSize...
    
    Dog lassie = new DogBuilder().called("lassie").ofBreed(Breed.COLLIE).ofHeight(60).build();
    
    构建器的内部实现比工厂稍微复杂一些,您看到的是。类作者(编写日历的人)决定,无论出于何种原因,他们都不希望类的用户(在本例中是您)直接创建日历

    这通常是因为:

  • 有各种各样的日历,哪种日历基本上不关你的事:-)
  • 也许构建一个新的日历需要很多工作,而库中只有一个日历,所以调用factory方法的每个人都会得到相同的日历
  • 制作日历对于大多数凡人来说太复杂了
  • 至于你的狗线:

    Dog cutie = Dog.bark();
    
    对于返回dog(非常不直观)的方法来说,bark()是个坏名字。 比如说,你的狗的种类非常复杂——它有年龄、性别、品种、颜色和大小。 每只狗都必须有所有指定的。 通过实现DogFactory,开发者可以更轻松地创建狗:

    public class DogFactory {
       public static Dog newDog() {
          return new Dog(1, Sex.MALE, Breed.PUDLE, brown, 40);
       }
    }
    
    一个相关的设计模式是,使用生成器的代码可以如下所示:

    cal.getInstance();
    
    Dog cutie = Dog.bark();      // Like this??
    
    this.setTitle...     
    this.setSize...
    
    Dog lassie = new DogBuilder().called("lassie").ofBreed(Breed.COLLIE).ofHeight(60).build();
    

    构建器的内部实现比工厂没有公共构造函数稍微复杂一些。是的,你可以在任何实例方法中使用
    这个。
    你要找的是所谓的“静态方法”简短的回答是否,除非方法bark()是静态的,并且还返回Dog类的实例,否则不能。没有公共构造函数。是的,你可以在任何实例方法中使用
    这个。
    你要找的是所谓的“静态方法”简短的回答是否定的,除非方法bark()是静态的,并且还返回Dog类的实例,否则不能这样做。如果您在他的行
    Dog cutie=Dog.bark()中添加注释会更好:)谢谢你。第二个也是工厂模式吗?“我认为这一切都是关于设计模式的,对吗?”@nicklowkc-我不太明白你所说的“第二个”到底是什么意思。请你详细说明一下好吗?如果你在他的台词上加一条注释就更好了
    Dog cutie=Dog.bark():)谢谢你。第二个也是工厂模式吗?“我认为这一切都是关于设计模式的,对吗?”@nicklowkc-我不太明白你所说的“第二个”到底是什么意思。你能详细说明一下吗?