java 建造者+继承 demo
时间: 2023-07-02 19:23:12 浏览: 50
下面是一个简单的Java示例,演示如何将建造者模式和继承结合使用。
我们以一个简单的汽车制造系统为例,其中有两种不同类型的汽车:轿车和卡车。轿车和卡车都需要进行多个步骤的构建,比如生产发动机、组装底盘、安装车门等等。我们可以使用建造者模式来实现这些步骤的构建,然后让轿车和卡车分别继承自一个抽象的汽车类,从而实现代码的重用。
首先,我们定义一个抽象的汽车类,其中包含了汽车的基本属性和方法:
```java
public abstract class Car {
protected String engine;
protected String chassis;
protected String doors;
public String getEngine() {
return engine;
}
public String getChassis() {
return chassis;
}
public String getDoors() {
return doors;
}
public abstract void setEngine(String engine);
public abstract void setChassis(String chassis);
public abstract void setDoors(String doors);
}
```
然后,我们定义一个抽象的建造者类,其中包含了汽车构建的各个步骤:
```java
public abstract class CarBuilder {
protected Car car;
public Car getCar() {
return car;
}
public void createNewCar() {
car = new Car();
}
public abstract void buildEngine();
public abstract void buildChassis();
public abstract void buildDoors();
}
```
接下来,我们定义具体的轿车和卡车类,它们继承自抽象的汽车类,并实现了其中的抽象方法:
```java
public class Sedan extends Car {
@Override
public void setEngine(String engine) {
this.engine = engine;
}
@Override
public void setChassis(String chassis) {
this.chassis = chassis;
}
@Override
public void setDoors(String doors) {
this.doors = doors;
}
}
public class Truck extends Car {
@Override
public void setEngine(String engine) {
this.engine = engine;
}
@Override
public void setChassis(String chassis) {
this.chassis = chassis;
}
@Override
public void setDoors(String doors) {
this.doors = doors;
}
}
```
最后,我们定义具体的轿车建造者和卡车建造者类,它们继承自抽象的建造者类,并实现了其中的抽象方法:
```java
public class SedanBuilder extends CarBuilder {
@Override
public void buildEngine() {
car.setEngine("Sedan Engine");
}
@Override
public void buildChassis() {
car.setChassis("Sedan Chassis");
}
@Override
public void buildDoors() {
car.setDoors("Sedan Doors");
}
}
public class TruckBuilder extends CarBuilder {
@Override
public void buildEngine() {
car.setEngine("Truck Engine");
}
@Override
public void buildChassis() {
car.setChassis("Truck Chassis");
}
@Override
public void buildDoors() {
car.setDoors("Truck Doors");
}
}
```
使用时,我们可以先创建一个具体的建造者对象,然后根据需要选择对应的建造者方法,最后获取构建好的汽车对象:
```java
public class Demo {
public static void main(String[] args) {
CarBuilder builder = new SedanBuilder();
builder.createNewCar();
builder.buildEngine();
builder.buildChassis();
builder.buildDoors();
Car sedan = builder.getCar();
builder = new TruckBuilder();
builder.createNewCar();
builder.buildEngine();
builder.buildChassis();
builder.buildDoors();
Car truck = builder.getCar();
}
}
```
这样,我们就可以通过建造者模式和继承,快速创建出不同类型的汽车,并且可以在代码中重用已有的代码。