组合模式:我们可以使用组合模式来管理图书列表。我们可以定义一个抽象的图书类,然后定义一个包含多个图书对象的组合类。这个组合类可以包含其他组合类或图书对象,从而形成一棵树形结构。
时间: 2024-03-07 20:53:13 浏览: 18
好的,下面我来补充一下关于组合模式的代码实现:
首先,我们定义一个抽象的图书类,其中包含一些公共的方法:
```java
public abstract class Book {
protected String name;
public Book(String name) {
this.name = name;
}
public abstract void add(Book book);
public abstract void remove(Book book);
public abstract void showInfo();
}
```
然后,我们定义一个组合类,用于包含多个图书对象:
```java
public class BookList extends Book {
private List<Book> bookList;
public BookList(String name) {
super(name);
bookList = new ArrayList<>();
}
@Override
public void add(Book book) {
bookList.add(book);
}
@Override
public void remove(Book book) {
bookList.remove(book);
}
@Override
public void showInfo() {
System.out.println("Book list: " + name);
for (Book book : bookList) {
book.showInfo();
}
}
}
```
最后,我们定义具体的图书类,比如小说、散文、文学评论:
```java
public class Novel extends Book {
public Novel(String name) {
super(name);
}
@Override
public void add(Book book) {
throw new UnsupportedOperationException("Novel cannot add book.");
}
@Override
public void remove(Book book) {
throw new UnsupportedOperationException("Novel cannot remove book.");
}
@Override
public void showInfo() {
System.out.println("Novel: " + name);
}
}
public class Prose extends Book {
public Prose(String name) {
super(name);
}
@Override
public void add(Book book) {
throw new UnsupportedOperationException("Prose cannot add book.");
}
@Override
public void remove(Book book) {
throw new UnsupportedOperationException("Prose cannot remove book.");
}
@Override
public void showInfo() {
System.out.println("Prose: " + name);
}
}
public class LiteraryCommentary extends Book {
public LiteraryCommentary(String name) {
super(name);
}
@Override
public void add(Book book) {
throw new UnsupportedOperationException("Literary commentary cannot add book.");
}
@Override
public void remove(Book book) {
throw new UnsupportedOperationException("Literary commentary cannot remove book.");
}
@Override
public void showInfo() {
System.out.println("Literary commentary: " + name);
}
}
```
使用组合模式来管理图书列表,我们可以通过创建一个 BookList 对象来包含多个图书对象,代码如下:
```java
public class Test {
public static void main(String[] args) {
BookList bookList = new BookList("My Book List");
Book novel1 = new Novel("The Great Gatsby");
Book novel2 = new Novel("To Kill a Mockingbird");
Book prose1 = new Prose("The Old Man and the Sea");
Book prose2 = new Prose("The Catcher in the Rye");
Book literaryCommentary1 = new LiteraryCommentary("The Anatomy of Criticism");
Book literaryCommentary2 = new LiteraryCommentary("A Room of One's Own");
bookList.add(novel1);
bookList.add(novel2);
bookList.add(prose1);
bookList.add(prose2);
bookList.add(literaryCommentary1);
bookList.add(literaryCommentary2);
bookList.showInfo();
}
}
```
输出结果:
```
Book list: My Book List
Novel: The Great Gatsby
Novel: To Kill a Mockingbird
Prose: The Old Man and the Sea
Prose: The Catcher in the Rye
Literary commentary: The Anatomy of Criticism
Literary commentary: A Room of One's Own
```
这就是使用组合模式来管理图书列表的基本实现。