java 组合模式 例子
时间: 2023-05-21 20:01:48 浏览: 66
一个常见的 Java 组合模式例子是树形结构。在树形结构中,每个节点可以是一个叶子节点或者一个包含其他节点的父节点。使用组合模式可以轻松地处理这种层次结构,因为每个节点都可以被视为一个组件,无论它是叶子节点还是父节点。例如,可以创建一个抽象类 Component 来表示树形结构中的所有节点,然后创建两个子类:Leaf 和 Composite。Leaf 表示叶子节点,而 Composite 表示父节点。这样,我们就可以使用组合模式来处理树形结构中的所有节点,而不需要编写大量的特定代码。
相关问题
java 组合模式 代码例子
以下是一个简单的 Java 组合模式的代码例子:
```
public abstract class Component {
protected String name;
public Component(String name) {
this.name = name;
}
public abstract void add(Component component);
public abstract void remove(Component component);
public abstract void display(int depth);
}
public class Leaf extends Component {
public Leaf(String name) {
super(name);
}
public void add(Component component) {
System.out.println("Cannot add to a leaf");
}
public void remove(Component component) {
System.out.println("Cannot remove from a leaf");
}
public void display(int depth) {
System.out.println("-".repeat(depth) + name);
}
}
public class Composite extends Component {
private List<Component> children = new ArrayList<>();
public Composite(String name) {
super(name);
}
public void add(Component component) {
children.add(component);
}
public void remove(Component component) {
children.remove(component);
}
public void display(int depth) {
System.out.println("-".repeat(depth) + name);
for (Component component : children) {
component.display(depth + 2);
}
}
}
// Usage example
public class Main {
public static void main(String[] args) {
Composite root = new Composite("root");
root.add(new Leaf("Leaf A"));
root.add(new Leaf("Leaf B"));
Composite composite = new Composite("Composite X");
composite.add(new Leaf("Leaf XA"));
composite.add(new Leaf("Leaf XB"));
root.add(composite);
root.display(1);
}
}
```
这个例子中,`Component` 是组合中的抽象类,`Leaf` 是叶子节点,`Composite` 是组合节点。`Composite` 中包含了一个 `List` 来存储它的子节点。在 `Composite` 中,`add` 方法和 `remove` 方法用来添加和删除子节点,`display` 方法用来显示节点的名称和它的子节点。在 `Leaf` 中,`add` 和 `remove` 方法都会输出错误信息,因为叶子节点没有子节点。在 `Main` 类中,我们创建了一个根节点 `root`,并向它添加了两个叶子节点和一个组合节点。最后,我们调用 `root.display(1)` 来显示整个树形结构。
给一个 java 组合模式 代码例子
当然可以,以下是一个简单的 Java 组合模式代码例子:
```
public abstract class Component {
protected String name;
public Component(String name) {
this.name = name;
}
public abstract void add(Component component);
public abstract void remove(Component component);
public abstract void display(int depth);
}
public class Leaf extends Component {
public Leaf(String name) {
super(name);
}
public void add(Component component) {
System.out.println("Cannot add to a leaf");
}
public void remove(Component component) {
System.out.println("Cannot remove from a leaf");
}
public void display(int depth) {
System.out.println("-".repeat(depth) + name);
}
}
public class Composite extends Component {
private List<Component> children = new ArrayList<>();
public Composite(String name) {
super(name);
}
public void add(Component component) {
children.add(component);
}
public void remove(Component component) {
children.remove(component);
}
public void display(int depth) {
System.out.println("-".repeat(depth) + name);
for (Component component : children) {
component.display(depth + 2);
}
}
}
```
这个例子中,`Component` 是组合模式中的抽象类,`Leaf` 和 `Composite` 是具体的实现类。`Leaf` 表示叶子节点,`Composite` 表示组合节点。`Composite` 中包含了一个 `List`,用于存储它的子节点。`add` 和 `remove` 方法用于添加和删除子节点,`display` 方法用于展示节点的层级结构。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.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)