java装饰器模式列子,可以依赖注入获取对象
时间: 2024-05-07 08:17:55 浏览: 91
java装饰者模式实现
首先,让我们了解一下装饰器模式的概念。装饰器模式是一种结构型设计模式,它允许你通过将对象放入包装器中来动态地修改其行为。这种模式对于需要在运行时增加或更改对象功能的情况非常有用。
下面是一个示例,展示如何使用装饰器模式实现依赖注入:
假设我们有一个接口 `Person`,其中包含一个 `speak()` 方法:
```java
public interface Person {
void speak();
}
```
现在我们有一个具体的实现类 `ChinesePerson`:
```java
public class ChinesePerson implements Person {
@Override
public void speak() {
System.out.println("我是中国人,我说中文");
}
}
```
我们想要为 `ChinesePerson` 类添加一些新功能,比如记录日志。为此,我们创建一个装饰器类 `LoggerDecorator`:
```java
public class LoggerDecorator implements Person {
private final Person person;
public LoggerDecorator(Person person) {
this.person = person;
}
@Override
public void speak() {
System.out.println("记录日志开始...");
person.speak();
System.out.println("记录日志结束...");
}
}
```
在 `LoggerDecorator` 类中,我们将 `Person` 对象作为参数传递给构造函数,并在 `speak()` 方法中添加记录日志的功能。
现在,我们可以使用依赖注入来获取 `Person` 对象。假设我们有一个 `PersonFactory` 工厂类,它返回一个 `Person` 对象:
```java
public class PersonFactory {
public static Person createPerson() {
return new ChinesePerson();
}
}
```
现在,我们使用装饰器模式来获取装饰后的 `Person` 对象:
```java
public class Main {
public static void main(String[] args) {
Person person = PersonFactory.createPerson();
person = new LoggerDecorator(person);
person.speak();
}
}
```
在上面的代码中,我们首先调用 `PersonFactory.createPerson()` 方法获取 `Person` 对象,然后将其传递给 `LoggerDecorator` 构造函数以装饰该对象。最后,我们调用 `speak()` 方法来输出日志和原始 `ChinesePerson` 对象的方法调用结果。
这就是装饰器模式的实现方式。通过这种方式,我们可以在运行时动态地增加或修改对象的功能,这对于需要灵活的依赖注入非常有用。
阅读全文