建造者模式:构建复杂对象的有效途径
发布时间: 2024-03-21 07:24:41 阅读量: 33 订阅数: 41 


Python实现的建造者模式示例
# 1. 理解建造者模式
## 1.1 什么是建造者模式
## 1.2 建造者模式的优势和适用场景
## 1.3 与其他设计模式的比较
# 2. 建造者模式的核心要素
在建造者模式中,有四个核心要素:产品类、建造者接口、具体建造者和指挥者。让我们逐一来了解它们。
# 3. 实践建造者模式
在本章中,我们将实践建造者模式,通过实现一个简单的案例来深入理解建造者模式的具体应用。
#### 3.1 实现一个简单的建造者模式案例
假设我们需要构建一个简单的房屋对象,房屋对象包含房顶、墙体、地板等部分,我们将使用建造者模式来构建这个房屋对象。
首先,定义产品类House,包含房顶、墙体、地板等属性:
```java
public class House {
private String roof;
private String walls;
private String floor;
public void setRoof(String roof) {
this.roof = roof;
}
public void setWalls(String walls) {
this.walls = walls;
}
public void setFloor(String floor) {
this.floor = floor;
}
@Override
public String toString() {
return "House{" +
"roof='" + roof + '\'' +
", walls='" + walls + '\'' +
", floor='" + floor + '\'' +
'}';
}
}
```
接下来,定义建造者接口HouseBuilder,包含构建房顶、墙体、地板等方法:
```java
public interface HouseBuilder {
void buildRoof();
void buildWalls();
void buildFloor();
House getHouse();
}
```
然后,实现具体建造者ConcreteHouseBuilder,负责具体的构建步骤:
```java
public class ConcreteHouseBuilder implements HouseBuilder {
private House house;
public ConcreteHouseBuilder() {
this.house = new House();
}
@Override
public void buildRoof() {
house.setRoof("Flat roof");
}
@Override
public void buildWalls() {
house.setWalls("Brick walls");
}
@Override
public void buildFloor() {
house.setFloor("Wooden floor");
}
@Override
public House getHouse() {
return house;
}
}
```
最后,定义指挥者Director,负责组装具体建造者来构建最终产品:
```java
public class Director {
private HouseBuilder houseBuilder;
public Director(HouseBuilder houseBuilder) {
this.houseBuilder = houseBuilder;
}
public void constructHouse() {
houseBuilder.buildRoof();
houseBuilder.buildWalls();
houseBuilder.buildFloor();
}
}
```
#### 3.2 代码示例:如何使用建造者模式构建一个房屋对象
现在,我们将演示如何使用建造者模式构建一个房屋对象:
```java
public class Main {
public static void main(String[] args) {
HouseBuilder houseBuilder = new ConcreteHouseBuilder();
Director director = new Director(houseBuilder);
director.constructHouse();
House house = houseBuilder.getHouse();
System.out.println(house);
}
}
```
运行结果会输出构建的房屋对象属性:
```
Hou
```
0
0
相关推荐







