通常情况下java里面创建一个对象都是直接使用new关键字,但是随着对java理解的深入逐渐会接触到设计模式,设计模式中关于对象创建的模式主要有两种:工厂模式和建造者模式,在这篇博文中来探讨一下这三种创建对象方式的理解,不当之处,望大家指正。
一、使用new关键字直接创建
假设我们有一个car类
public class Car{
private String name;
public Car(){}
public String getName(){
return this.name;
}
public void setName(String name){
this.name = name;
}
}
因为car的属性很简单,创建直接调用器无参构造器就可以。
public static void main(String[] args) {
Car car = new Car();
System.out.println(car.getName());
}
二、工厂模式创建
如果我们的car对象创建需要用到依赖一些外部属性
public class Car{
private Engine engine; // 发动机引擎
Private Navigationer navigationer;//导航
public Car(){
this.engine = engine;
this.navigationer= navigationer;
}
public void drive(){
engine.start();
navigationer.navigation();
}
}
car的创建需要engine,navigation两个对象的引用,但是可能我们用到car类的地方并不关系car用的是是何种引擎,使用的是那种导航软件。这个时候如果为了创建car对象而把engine和navigationer两个对象引入到使用car的类里面,显然是增加了类与类之间的耦合,在设计软件的时候我们要尽量做到收敛对象影响范围,所以这里我们需要一个对象创建工厂,将该对象创建所需要用到的属性收敛到工厂类里面。
public class CarFactory{
private Engine engine; // 发动机引擎
Private Navigationer navigationer;//导航
public Car Create(){
return new Car(engine,navigationer);
}
}
三、建造者模式
当car的创建过程变得过于复杂,为了让使用者容易理解复杂对象的创建过程,我们需要用到建造者模式,隐藏创建时的复杂逻辑。
public class CarBuilder{
private Engine engine; // 发动机引擎
Private Navigationer navigationer;//导航
private Map map;
public Car build(){
navigationer.setMap(map);
return new Car(engine,navigationer);
}
public CarBuilder setEngine(Engine engine){
this.engine=engine;
return this;
}
public CarBuilder setNavigationer(Navigationer navigationer){
this.navigationer = navigationer;
return this;
}
public CarBuilder setMap(Map map) {
this.map = map;
return this;
}
}