Skip to content

Commit e426d4c

Browse files
authored
Merge pull request mouredev#4582 from apuntesdejava/main
#26 - Java
2 parents 753bf90 + c5c58c7 commit e426d4c

File tree

1 file changed

+242
-0
lines changed

1 file changed

+242
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,242 @@
1+
import java.util.ArrayList;
2+
import java.util.List;
3+
import java.util.Optional;
4+
import java.util.function.Consumer;
5+
6+
public interface diegosilval {
7+
static void main(String... args) {
8+
System.out.println("** Usando una clase para todo **");
9+
var libraryUtil = new LibraryUtil();
10+
libraryUtil.addUser("01", "Alex", "[email protected]");
11+
libraryUtil.addUser("02", "Bob", "[email protected]");
12+
libraryUtil.addUser("03", "Cark", "[email protected]");
13+
14+
libraryUtil.addBook("To Kill a Mockingbird", "Harper Lee", 2);
15+
libraryUtil.addBook("1984", "George Orwell", 1);
16+
libraryUtil.addBook("Pride and Prejudice", "Jane Austen", 0);
17+
18+
libraryUtil.bookBorrow("1984", "01").ifPresentOrElse(showBorrowSuccess, showBorrowFail);
19+
libraryUtil.bookBorrow("To Kill a Mockingbird", "02").ifPresentOrElse(showBorrowSuccess, showBorrowFail);
20+
libraryUtil.bookBorrow("1984", "03").ifPresentOrElse(showBorrowSuccess, showBorrowFail);
21+
22+
// Usando SRP
23+
System.out.println("** Usando una clase por cada responsabilidad");
24+
var usersRepository = new UsersRepository();
25+
var booksRepository = new BooksRepository();
26+
var srpLibraryUtil = new SrpLibraryUtil(usersRepository, booksRepository); // inyectando
27+
usersRepository.addUser("01", "Alex", "[email protected]");
28+
usersRepository.addUser("02", "Bob", "[email protected]");
29+
usersRepository.addUser("03", "Cark", "[email protected]");
30+
31+
booksRepository.addBook("To Kill a Mockingbird", "Harper Lee", 2);
32+
booksRepository.addBook("1984", "George Orwell", 1);
33+
booksRepository.addBook("Pride and Prejudice", "Jane Austen", 0);
34+
35+
srpLibraryUtil.bookBorrow("1984", "01").ifPresentOrElse(showBorrowSuccess, showBorrowFail);
36+
srpLibraryUtil.bookBorrow("To Kill a Mockingbird", "02").ifPresentOrElse(showBorrowSuccess, showBorrowFail);
37+
srpLibraryUtil.bookBorrow("1984", "03").ifPresentOrElse(showBorrowSuccess, showBorrowFail);
38+
39+
}
40+
41+
static Consumer<BookLoan> showBorrowSuccess = (bookLoan) -> {
42+
System.out.println(String.format("Se prestó correctamente %s a %s", bookLoan.getBook().getTitle(),
43+
bookLoan.getUser().getName()));
44+
};
45+
static Runnable showBorrowFail = () -> System.err.println(
46+
"El usuario no existe, el nombre del libro no existe, o no existen libros disponibles para prestar");
47+
48+
}
49+
50+
/**
51+
* Book Class
52+
*/
53+
class Book {
54+
private String title;
55+
private String author;
56+
private int available;
57+
58+
public Book() {
59+
}
60+
61+
public Book(String title, String author, int available) {
62+
this.title = title;
63+
this.author = author;
64+
this.available = available;
65+
}
66+
67+
public String getTitle() {
68+
return title;
69+
}
70+
71+
public void setTitle(String title) {
72+
this.title = title;
73+
}
74+
75+
public String getAuthor() {
76+
return author;
77+
}
78+
79+
public void setAuthor(String author) {
80+
this.author = author;
81+
}
82+
83+
public int getAvailable() {
84+
return available;
85+
}
86+
87+
public void setAvailable(int available) {
88+
this.available = available;
89+
}
90+
91+
public void addAvailable(int delta) {
92+
this.available += delta;
93+
}
94+
95+
public void removeAvailable(int delta) {
96+
this.available -= delta;
97+
}
98+
99+
}
100+
101+
/**
102+
* User Class
103+
*/
104+
class User {
105+
private String name;
106+
private String id;
107+
private String email;
108+
109+
public User() {
110+
}
111+
112+
public User(String name, String id, String email) {
113+
this.name = name;
114+
this.id = id;
115+
this.email = email;
116+
}
117+
118+
public String getName() {
119+
return name;
120+
}
121+
122+
public void setName(String name) {
123+
this.name = name;
124+
}
125+
126+
public String getId() {
127+
return id;
128+
}
129+
130+
public void setId(String id) {
131+
this.id = id;
132+
}
133+
134+
public String getEmail() {
135+
return email;
136+
}
137+
138+
public void setEmail(String email) {
139+
this.email = email;
140+
}
141+
142+
}
143+
144+
class BookLoan {
145+
private final Book book;
146+
private final User user;
147+
148+
public BookLoan(Book book, User user) {
149+
this.book = book;
150+
this.user = user;
151+
}
152+
153+
public Book getBook() {
154+
return book;
155+
}
156+
157+
public User getUser() {
158+
return user;
159+
}
160+
161+
}
162+
163+
class LibraryUtil {
164+
private List<Book> books = new ArrayList<>();
165+
private List<User> users = new ArrayList<>();
166+
private List<BookLoan> bookLoans = new ArrayList<>();
167+
168+
public void addBook(String title, String author, int available) {
169+
books.add(new Book(title, author, available));
170+
}
171+
172+
public void addUser(String id, String name, String email) {
173+
users.add(new User(name, id, email));
174+
}
175+
176+
public Optional<BookLoan> bookBorrow(String title, String userId) {
177+
var user = users.stream().filter(aUser -> aUser.getId().equals(userId)).findFirst();
178+
if (user.isEmpty())
179+
return Optional.empty();
180+
var book = books.stream().filter(aBook -> aBook.getTitle().equalsIgnoreCase(title)).findFirst();
181+
if (book.isEmpty() || book.get().getAvailable() == 0)
182+
return Optional.empty();
183+
book.get().removeAvailable(1);
184+
var bookLoan = new BookLoan(book.get(), user.get());
185+
bookLoans.add(bookLoan);
186+
return Optional.of(bookLoan);
187+
}
188+
}
189+
190+
/**
191+
* Clase LibraryUtil aplicando SRP
192+
*/
193+
class SrpLibraryUtil {
194+
private final UsersRepository usersRepository;
195+
private final BooksRepository booksRepository;
196+
private List<BookLoan> bookLoans = new ArrayList<>();
197+
198+
public SrpLibraryUtil(UsersRepository usersRepository, BooksRepository booksRepository) {
199+
this.usersRepository = usersRepository;
200+
this.booksRepository = booksRepository;
201+
}
202+
203+
public Optional<BookLoan> bookBorrow(String title, String userId) {
204+
var user = usersRepository.findById(userId);
205+
var book = booksRepository.findByTitle(title);
206+
if (user.isEmpty() || book.isEmpty())
207+
return Optional.empty();
208+
book.get().removeAvailable(1);
209+
var bookLoan = new BookLoan(book.get(), user.get());
210+
bookLoans.add(bookLoan);
211+
return Optional.of(bookLoan);
212+
}
213+
214+
}
215+
216+
/**
217+
* Repositorio de usuarios
218+
*/
219+
class UsersRepository {
220+
private List<User> users = new ArrayList<>();
221+
222+
public void addUser(String id, String name, String email) {
223+
users.add(new User(name, id, email));
224+
}
225+
226+
public Optional<User> findById(String userId) {
227+
return users.stream().filter(aUser -> aUser.getId().equals(userId)).findFirst();
228+
}
229+
}
230+
231+
class BooksRepository {
232+
private List<Book> books = new ArrayList<>();
233+
234+
public void addBook(String title, String author, int available) {
235+
books.add(new Book(title, author, available));
236+
}
237+
238+
public Optional<Book> findByTitle(String title) {
239+
return books.stream().filter(aBook -> aBook.getTitle().equalsIgnoreCase(title) && aBook.getAvailable() > 0)
240+
.findFirst();
241+
}
242+
}

0 commit comments

Comments
 (0)