使用Spring的IOC(控制反转)和DI(依赖注入)思想,模拟实现打印机功能。 要求: 对于同一个打印内容,打印机可以选用黑色墨盒或彩色墨盒,打印纸张可选用A3纸张(每行打印10个字符)或A4纸张(每行打印20个字符)。
时间: 2024-09-28 14:09:58 浏览: 33
在Spring框架中,我们可以利用IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)的思想来设计一个模块化的系统,模拟打印机的功能。首先,我们需要创建几个基础组件:
1. **墨盒接口**: `PrinterCartridge` 接口代表墨盒,包含打印颜色的信息。
```java
public interface PrinterCartridge {
String getColor();
}
```
2. **具体墨盒实现**: 黑色墨盒 `BlackPrinterCartridge` 和彩色墨盒 `ColorPrinterCartridge` 实现该接口。
```java
@Component
public class BlackPrinterCartridge implements PrinterCartridge {
@Override
public String getColor() {
return "Black";
}
}
@Component
public class ColorPrinterCartridge implements PrinterCartridge {
@Override
public String getColor() {
return "Color";
}
}
```
3. **纸张接口**: `PaperSize` 接口描述纸张大小,包含每行字符数信息。
```java
public interface PaperSize {
int getCharactersPerLine();
}
```
4. **具体纸张实现**: A3纸 `A3Paper` 和 A4纸 `A4Paper` 实现该接口。
```java
@Component
public class A3Paper implements PaperSize {
@Override
public int getCharactersPerLine() {
return 10;
}
}
@Component
public class A4Paper implements PaperSize {
@Override
public int getCharactersPerLine() {
return 20;
}
}
```
5. **打印机组件**: `Printer` 类依赖于墨盒和纸张,通过构造函数接受它们作为参数。
```java
@Component
public class Printer {
private final PrinterCartridge cartridge;
private final PaperSize paper;
@Autowired
public Printer(PrinterCartridge cartridge, PaperSize paper) {
this.cartridge = cartridge;
this.paper = paper;
}
public void print(String content) {
for (int i = 0; i < content.length(); i += paper.getCharactersPerLine()) {
System.out.println(content.substring(i, i + paper.getCharactersPerLine()));
}
System.out.println("Printing with a " + cartridge.getColor() + " printer on " + paper);
}
}
```
现在,我们可以在需要的地方通过`@Autowired`注解自动获取到对应的墨盒和纸张实例,并调用`print()`方法进行打印,实现了Spring的依赖注入。
阅读全文