实例一:水果盘 在水果盘(Plate)中有一些水果,如苹果(Apple)、香蕉(Banana)、梨子(Pear),当然大水果盘中还可以有小水果盘,现需要对盘中的水果进行遍历(吃),当然如果对一个水果盘执行“吃”方法,实际上就是吃其中的水果。使用透明组合模式模拟该场景。
时间: 2024-11-03 21:13:17 浏览: 25
透明组合模式是一种设计模式,它允许将单个对象或对象的集合(如数组或列表)表示为单一的对象。在这种模式下,客户端并不关心内部结构的具体细节,只需与组合对象交互即可。在这个水果盘的例子中:
1. **基础组件**:我们有一个 Fruit 类作为基类,包含吃(feast())方法,代表基本的水果。
```java
public abstract class Fruit {
public abstract void feast();
}
```
2. **具体组件**:Apple、Banana 和 Pear 类分别继承自 Fruit,并实现各自的 feast() 方法。
```java
public class Apple extends Fruit {
@Override
public void feast() {
System.out.println("吃了一个苹果");
}
}
public class Banana extends Fruit {
@Override
public void feast() {
System.out.println("吃了一个香蕉");
}
}
public class Pear extends Fruit {
@Override
public void feast() {
System.out.println("吃了一个梨");
}
}
```
3. **组合对象**:我们创建一个 Plate 类,它既可以是一个具体的 Fruit,也可以是其他 Plate 的组合,实现了 transparent composition(透明组合)。
```java
public class Plate implements Iterable<Fruit> {
private List<Fruit> fruits;
// 添加水果等方法...
@Override
public Iterator<Fruit> iterator() {
return fruits.iterator();
}
public void feast() {
for (Fruit fruit : this) {
fruit.feast();
}
}
}
```
4. **客户端交互**:用户可以像操作一个单一的 Fruit 对象一样处理 Plate,而不需要了解其内部结构是否复杂。
```java
Plate bigPlate = new Plate();
bigPlate.add(new Apple());
bigPlate.add(new Banana());
// 现在可以直接调用 feast() 方法
bigPlate.feast(); // 输出:吃了一个苹果 吃了一个香蕉
```
阅读全文