关于工厂模式和建造者模式的理解

通常情况下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;
    }

}

猜你喜欢

转载自blog.csdn.net/qq_36031640/article/details/78907762
今日推荐