抽象基类

main
SLMS Development Team 5 months ago
parent 0772a1649d
commit a0f8e3afb4

@ -0,0 +1,65 @@
package com.smartlibrary.factory;
import com.smartlibrary.model.Book;
import java.time.LocalDate;
/**
*
*
*/
public abstract class AbstractBookFactory implements BookFactory {
/**
*
*
*/
protected Book createBaseBook(String id, String title, String author, String isbn,
String publisher, LocalDate publishDate, String category) {
Book book = new Book();
book.setId(id);
book.setTitle(title);
book.setAuthor(author);
book.setIsbn(isbn);
book.setPublisher(publisher);
book.setPublishDate(publishDate);
book.setCategory(category);
book.setAvailable(true); // 默认设置为可借阅
return book;
}
/**
*
*
*/
@Override
public Book createBook(String id, String title, String author, String isbn,
String publisher, LocalDate publishDate, String category) {
Book book = createBaseBook(id, title, author, isbn, publisher, publishDate, category);
book.setBookType(getBookType());
// 调用钩子方法,允许子类添加特定属性
customizeBook(book);
// 记录创建日志
logBookCreation(book);
return book;
}
/**
*
*
*/
protected void customizeBook(Book book) {
// 子类可以重写此方法添加特定属性
}
/**
*
*/
protected void logBookCreation(Book book) {
System.out.println("创建" + getBookType() + ": " + book.getTitle());
}
}

@ -2,36 +2,26 @@ package com.smartlibrary.factory;
import com.smartlibrary.model.Book;
import java.time.LocalDate;
/**
* -
*
*/
public class EBookFactory implements BookFactory {
public class EBookFactory extends AbstractBookFactory {
@Override
public Book createBook(String id, String title, String author, String isbn,
String publisher, LocalDate publishDate, String category) {
Book book = new Book();
book.setId(id);
book.setTitle(title);
book.setAuthor(author);
book.setIsbn(isbn);
book.setPublisher(publisher);
book.setPublishDate(publishDate);
book.setCategory(category);
book.setBookType("电子书");
book.setAvailable(true); // 电子书通常总是可借阅
// 电子书特有属性可以在这里设置
System.out.println("创建电子书: " + title);
return book;
public String getBookType() {
return "电子书";
}
/**
*
*/
@Override
public String getBookType() {
return "电子书";
protected void customizeBook(Book book) {
// 电子书通常总是可借阅
// 电子书特有属性可以在这里设置
// 例如:设置文件格式、文件大小、下载链接等
book.setFormat("PDF"); // 示例:设置默认格式
book.setFileSize(1024); // 示例设置默认文件大小KB
}
}

@ -2,36 +2,26 @@ package com.smartlibrary.factory;
import com.smartlibrary.model.Book;
import java.time.LocalDate;
/**
* -
*
*/
public class JournalFactory implements BookFactory {
public class JournalFactory extends AbstractBookFactory {
@Override
public Book createBook(String id, String title, String author, String isbn,
String publisher, LocalDate publishDate, String category) {
Book book = new Book();
book.setId(id);
book.setTitle(title);
book.setAuthor(author);
book.setIsbn(isbn);
book.setPublisher(publisher);
book.setPublishDate(publishDate);
book.setCategory(category);
book.setBookType("期刊");
book.setAvailable(true);
// 期刊特有属性可以在这里设置
System.out.println("创建期刊: " + title);
return book;
public String getBookType() {
return "期刊";
}
/**
*
*/
@Override
public String getBookType() {
return "期刊";
protected void customizeBook(Book book) {
// 期刊特有属性可以在这里设置
// 例如:设置期刊号、卷号、期号等
book.setVolume("第1卷"); // 示例:设置默认卷号
book.setIssue("第1期"); // 示例:设置默认期号
book.setIssn("ISSN-1234-5678"); // 示例设置默认ISSN号
}
}

@ -2,36 +2,24 @@ package com.smartlibrary.factory;
import com.smartlibrary.model.Book;
import java.time.LocalDate;
/**
* -
*
*/
public class PhysicalBookFactory implements BookFactory {
public class PhysicalBookFactory extends AbstractBookFactory {
@Override
public Book createBook(String id, String title, String author, String isbn,
String publisher, LocalDate publishDate, String category) {
Book book = new Book();
book.setId(id);
book.setTitle(title);
book.setAuthor(author);
book.setIsbn(isbn);
book.setPublisher(publisher);
book.setPublishDate(publishDate);
book.setCategory(category);
book.setBookType("实体书");
book.setAvailable(true);
// 实体书特有属性可以在这里设置
System.out.println("创建实体书: " + title);
return book;
public String getBookType() {
return "实体书";
}
/**
*
*/
@Override
public String getBookType() {
return "实体书";
protected void customizeBook(Book book) {
// 实体书特有属性可以在这里设置
// 例如:设置借阅期限、物理位置等
book.setLocation("书架A-" + book.getCategory()); // 示例:设置默认位置
}
}

@ -19,6 +19,16 @@ public class Book {
private String qrCode; // 二维码内容(唯一标识)
private String location; // 馆藏位置
private String description; // 图书描述
// 期刊特有属性
private String volume; // 卷号
private String issue; // 期号
private String issn; // ISSN号
// 电子书特有属性
private String format; // 文件格式 (PDF, EPUB等)
private int fileSize; // 文件大小 (KB)
private String downloadUrl; // 下载链接
public Book() {
this.available = true;
@ -150,6 +160,56 @@ public class Book {
public void setDescription(String description) {
this.description = description;
}
// 期刊特有属性的Getter和Setter
public String getVolume() {
return volume;
}
public void setVolume(String volume) {
this.volume = volume;
}
public String getIssue() {
return issue;
}
public void setIssue(String issue) {
this.issue = issue;
}
public String getIssn() {
return issn;
}
public void setIssn(String issn) {
this.issn = issn;
}
// 电子书特有属性的Getter和Setter
public String getFormat() {
return format;
}
public void setFormat(String format) {
this.format = format;
}
public int getFileSize() {
return fileSize;
}
public void setFileSize(int fileSize) {
this.fileSize = fileSize;
}
public String getDownloadUrl() {
return downloadUrl;
}
public void setDownloadUrl(String downloadUrl) {
this.downloadUrl = downloadUrl;
}
@Override
public String toString() {
@ -164,6 +224,13 @@ public class Book {
", available=" + available +
", bookType='" + bookType + '\'' +
", qrCode='" + qrCode + '\'' +
", location='" + location + '\'' +
", volume='" + volume + '\'' +
", issue='" + issue + '\'' +
", issn='" + issn + '\'' +
", format='" + format + '\'' +
", fileSize=" + fileSize +
", downloadUrl='" + downloadUrl + '\'' +
'}';
}
}
Loading…
Cancel
Save