public class Book {
private String bookName;
private String author;
private int price;
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
订单
public class Order {
private String username;
private Book book;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
}
生成订单
public class OrderFactory {
private static final Map<String, Book> books = new HashMap<>();
public static Order generateOrder(String username, String bookName){
Order order = new Order();
order.setUsername(username);
if(books.containsKey(bookName)){
order.setBook(books.get(bookName));
}else {
Book book = createNewBookInstance(bookName);
order.setBook(book);
books.put(bookName,book );
}
return order;
}
private static Book createNewBookInstance(String bookName){
//演示,实际可能是去数据库等获取具体信息
Book book = new Book();
book.setBookName(bookName);
book.setAuthor("maxwell");
book.setPrice(new Random().nextInt(100));
return book;
}
}
客户端
public class Client {
public static void main(String[] args) {
//假如只有10种书,每本书有1000个订单,而在某处我们需要将这些订单信息都加载到内存中,
// 这10*1000个订单实例则会共享这10个书的实例
// 这样就可以节省[(10*1000 - 10 )* 每个书的实例的大小]的内存空间
List<Order> orders = new ArrayList<>();
for (int i = 0; i < 10; i++) {
String bookName = "book" + i;
for (int j = 0; j < 1000; j++) {
Order order = OrderFactory.generateOrder("xiaoming" + j, bookName);
orders.add(order);
}
}
}
}