package com.bookshop.structural.proxy;
import com.bookshop.domain.Book;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
/**
* The real subject: stands in for the distributor's catalog service, where every
* lookup is a network round-trip. {@code lookupCount} makes the cost observable.
*/
public class RemoteBookCatalog implements BookCatalog {
private final Map<String, Book> books = new HashMap<>();
private int lookupCount;
public RemoteBookCatalog() {
add(new Book("978-0201633610", "Design Patterns", "Gamma, Helm, Johnson, Vlissides",
new BigDecimal("42.00")));
add(new Book("978-0134685991", "Effective Java", "Joshua Bloch", new BigDecimal("39.99")));
}
private void add(Book book) {
books.put(book.isbn(), book);
}
@Override
public Optional<Book> findByIsbn(String isbn) {
lookupCount++;
return Optional.ofNullable(books.get(isbn));
}
public int lookupCount() {
return lookupCount;
}
}