在Java中,创建对象通常有两种主要方式:实例化和构造器模式。
实例化:实例化是指创建一个新的对象,该对象与给定的类具有相同的类型和属性。实例化通常使用关键字“new”和类名来完成。
Object obj = new Object();
构造器模式:构造器模式是一种创建对象的方式,该对象在创建时不需要显式地调用构造函数。相反,构造器模式使用构造函数接口来定义对象的构造行为。通过实现该接口,您可以定义一个无参构造函数或带参数的构造函数,并在创建对象时传递参数。
public class Car {
private Engine engine;
private String color;
public Car(String color) {
this.color = color;
engine = new Engine();
}
public void start() {
engine.start();
}
public void stop() {
engine.stop();
}
}
在上面的示例中,Car类具有一个名为engine的私有成员变量,该变量是一个引擎对象。构造函数接口Car.Builder定义了一个带有一个参数的构造函数,该参数是一个名为color的字符串。这意味着可以在Car对象中使用color变量,而无需显式地调用构造函数。
构造器模式还使用Builder设计模式。Builder接口提供了一种创建Car对象的方法,该方法使用构造函数接口来定义对象的构造行为,并将color字符串传递给构造函数。然后,您可以使用Builder设计模式创建一个Car对象,并将其与任何其他字符串一起使用,而无需显式地调用构造函数。
总之,实例化是Java中创建对象的主要方式,而构造器模式是一种创建对象的方式,该对象在创建时不需要显式地调用构造函数。
Car 类还包含一个名为clone()的私有方法。
对于构造器模式,它有两个角色:类和它的构造器。在上面的示例中,我们实现了 Car 类,并创建了一个构造函数。Car 类还包含一个名为 clone() 的私有方法,该方法返回 Car 类的一个副本。这使得可以使用 clone() 方法来创建 Car 类的多个副本,而无需显式地调用构造函数。
以下是一个完整的示例:
public class Car {
private Engine engine;
private String color;
public Car(String color) {
this.color = color;
engine = new Engine();
}
public void start() {
engine.start();
}
public void stop() {
engine.stop();
}
public Car clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
}
}
}
public class CarBuilder {
public static Car build(String color) {
return new Car(color);
}
}
public class Main {
public static void main(String[] args) {
Car car1 = CarBuilder.build("red");
Car car2 = car1.clone();
car1.start();
car2.start();
car1.stop();
car2.stop();
}
}
在上面的示例中,CarBuilder 类包含一个名为 build() 的静态方法,该方法返回一个新的 Car 对象。Car 类还包含一个名为 clone() 的私有方法,该方法返回 Car 类的一个副本。这使得可以使用 clone() 方法来创建 Car 类的多个副本,而无需显式地调用构造函数。
通过这种方式,我们可以使用构造器模式来实现无参数的 Car 构造函数,而不需要显式地调用 setXXX() 或 getXXX() 方法。这使得代码更加简洁和易于理解。