工厂方法模式与建造者模式结合使用代码实现
时间: 2024-04-15 08:07:13 浏览: 24
以下是工厂方法模式和建造者模式结合使用的示例代码:
```java
// 抽象建造者
interface Builder {
void buildPartA();
void buildPartB();
Product getResult();
}
// 具体建造者1
class ConcreteBuilder1 implements Builder {
private Product product = new Product();
@Override
public void buildPartA() {
product.add("PartA1");
}
@Override
public void buildPartB() {
product.add("PartB1");
}
@Override
public Product getResult() {
return product;
}
}
// 具体建造者2
class ConcreteBuilder2 implements Builder {
private Product product = new Product();
@Override
public void buildPartA() {
product.add("PartA2");
}
@Override
public void buildPartB() {
product.add("PartB2");
}
@Override
public Product getResult() {
return product;
}
}
// 产品类
class Product {
private List<String> parts = new ArrayList<>();
public void add(String part) {
parts.add(part);
}
public void show() {
System.out.println("Product Parts:");
for (String part : parts) {
System.out.println(part);
}
}
}
// 工厂方法接口
interface Factory {
Builder createBuilder();
}
// 具体工厂1
class ConcreteFactory1 implements Factory {
@Override
public Builder createBuilder() {
return new ConcreteBuilder1();
}
}
// 具体工厂2
class ConcreteFactory2 implements Factory {
@Override
public Builder createBuilder() {
return new ConcreteBuilder2();
}
}
// 客户端
class Client {
public static void main(String[] args) {
Factory factory = new ConcreteFactory1();
Builder builder = factory.createBuilder();
builder.buildPartA();
builder.buildPartB();
Product product = builder.getResult();
product.show();
factory = new ConcreteFactory2();
builder = factory.createBuilder();
builder.buildPartA();
builder.buildPartB();
product = builder.getResult();
product.show();
}
}
```
在上面的代码中,工厂方法模式的作用是创建具体的建造者对象,而建造者模式的作用是构建产品对象。客户端可以根据需要选择不同的具体工厂来创建不同的具体建造者并使用它们来构建产品对象。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)