1
+ import java .util .ArrayList ;
2
+ import java .util .HashMap ;
3
+ import java .util .List ;
4
+ import java .util .Map ;
5
+ import java .util .Optional ;
6
+
7
+ public class danhingar {
8
+
9
+ // Incorrecto
10
+ public class User {
11
+
12
+ private String name ;
13
+ private String email ;
14
+
15
+ public User (String name , String email ) {
16
+ this .email = email ;
17
+ this .name = name ;
18
+ }
19
+
20
+ public void save (User user ) {
21
+
22
+ }
23
+
24
+ public void sendEmail (User user ) {
25
+
26
+ }
27
+
28
+ }
29
+
30
+ // Correcto
31
+ public class User1 {
32
+
33
+ private String name ;
34
+ private String email ;
35
+
36
+ public User1 (String name , String email ) {
37
+ this .name = name ;
38
+ this .email = email ;
39
+ }
40
+
41
+ }
42
+
43
+ public class UserService {
44
+
45
+ public void save (User1 user1 ) {
46
+
47
+ }
48
+
49
+ }
50
+
51
+ public class EmailService {
52
+
53
+ public void sendEmail (String email , String message ) {
54
+
55
+ }
56
+ }
57
+
58
+ public static void main (String [] args ) {
59
+ // WITHOUT SRP
60
+ Library library = new Library ();
61
+ library .
addUser (
1 ,
"Daniel" ,
"[email protected] " );
62
+ library .
addUser (
2 ,
"Pepe" ,
"[email protected] " );
63
+ System .out .println (library .toString ());
64
+ library .addBook ("Libro 1" , "Autor 1" , 5 );
65
+ library .addBook ("Libro 2" , "Autor 2" , 3 );
66
+ System .out .println (library .toString ());
67
+ library .loanBook (1 , "Libro 1" );
68
+ library .loanBook (2 , "Libro 1" );
69
+ System .out .println (library .toString ());
70
+ library .returnBook (2 , "Libro 1" );
71
+ System .out .println (library .toString ());
72
+
73
+ // WITH SRP
74
+ Library2 library2 = new Library2 ();
75
+ library2 .
addUser (
new User2 (
1 ,
"Daniel" ,
"[email protected] " ));
76
+ library2 .
addUser (
new User2 (
2 ,
"Pepe" ,
"[email protected] " ));
77
+ System .out .println (library2 .toString ());
78
+ library2 .addBook (new Book ("Libro 1" , "Autor 1" , 5 ));
79
+ library2 .addBook (new Book ("Libro 2" , "Autor 2" , 3 ));
80
+ System .out .println (library2 .toString ());
81
+ library2 .loanBook (1 , "Libro 1" );
82
+ library2 .loanBook (2 , "Libro 1" );
83
+ System .out .println (library2 .toString ());
84
+ library2 .returnBook (2 , "Libro 1" );
85
+ System .out .println (library2 .toString ());
86
+ }
87
+
88
+ }
89
+
90
+ // Extra
91
+
92
+ // Incorrecto
93
+
94
+ class Library {
95
+ private List <Map <String , Object >> users ;
96
+ private List <Map <String , Object >> books ;
97
+ private Map <Integer , List <String >> loans ;
98
+
99
+ public Library () {
100
+ this .users = new ArrayList <>();
101
+ this .books = new ArrayList <>();
102
+ this .loans = new HashMap <>();
103
+ }
104
+
105
+ public void addBook (String title , String author , Integer copies ) {
106
+ Map <String , Object > book = new HashMap <>();
107
+ book .put ("title" , title );
108
+ book .put ("author" , author );
109
+ book .put ("copies" , copies );
110
+ books .add (book );
111
+ }
112
+
113
+ public void addUser (Integer id , String name , String email ) {
114
+ Map <String , Object > user = new HashMap <>();
115
+ user .put ("id" , id );
116
+ user .put ("name" , name );
117
+ user .put ("email" , email );
118
+ users .add (user );
119
+ }
120
+
121
+ public void loanBook (Integer userId , String bookTitle ) {
122
+ for (Map <String , Object > book : books ) {
123
+ if (book .get ("title" ).equals (bookTitle ) && (Integer ) book .get ("copies" ) > 0 ) {
124
+ book .put ("copies" , (Integer ) book .get ("copies" ) - 1 );
125
+ List <String > booksUser = loans .get (userId ) != null ? loans .get (userId ) : new ArrayList <>();
126
+ booksUser .add (bookTitle );
127
+ loans .put (userId , booksUser );
128
+ }
129
+ }
130
+ }
131
+
132
+ public void returnBook (Integer userId , String bookTitle ) {
133
+ boolean exist = this .loans .get (userId ).stream ().anyMatch (b -> b .equals (bookTitle ));
134
+ if (exist ) {
135
+ this .books .stream ().filter (b -> b .get ("title" ).equals (bookTitle ))
136
+ .forEach (b -> b .put ("copies" , (Integer ) b .get ("copies" ) + 1 ));
137
+ this .loans .get (userId ).remove (bookTitle );
138
+ }
139
+ }
140
+
141
+ @ Override
142
+ public String toString () {
143
+ return "Library [users=" + users .toString () + ", books=" + books .toString () + ", loans=" + loans .toString () + "]" ;
144
+ }
145
+ }
146
+
147
+ // Correcto
148
+
149
+ class Library2 {
150
+
151
+ private List <User2 > users ;
152
+ private List <Book > books ;
153
+ private Loan loans ;
154
+
155
+ public Library2 () {
156
+ users = new ArrayList <>();
157
+ books = new ArrayList <>();
158
+ loans = new Loan ();
159
+ }
160
+
161
+ public void addBook (Book book ) {
162
+ books .add (book );
163
+ }
164
+
165
+ public void addUser (User2 user ) {
166
+ users .add (user );
167
+ }
168
+
169
+ public void loanBook (Integer userId , String bookTitle ) {
170
+ Optional <User2 > user = users .stream ().filter (u -> u .getId ().equals (userId )).findFirst ();
171
+ Optional <Book > book = books .stream ().filter (b -> b .getTitle ().equals (bookTitle )).findFirst ();
172
+ if (user .isPresent () && book .isPresent ()) {
173
+ loans .loanBook (user .get (), book .get ());
174
+ }
175
+
176
+ }
177
+
178
+ public void returnBook (Integer userId , String bookTitle ) {
179
+ Optional <User2 > user = users .stream ().filter (u -> u .getId ().equals (userId )).findFirst ();
180
+ Optional <Book > book = books .stream ().filter (b -> b .getTitle ().equals (bookTitle )).findFirst ();
181
+ if (user .isPresent () && book .isPresent ()) {
182
+ loans .returnBook (user .get (), book .get ());
183
+ }
184
+ }
185
+
186
+ @ Override
187
+ public String toString () {
188
+ return "Library [users=" + users + ", books=" + books .toString () + ", loans=" + loans + "]" ;
189
+ }
190
+
191
+ }
192
+
193
+ class Book {
194
+
195
+ private String author ;
196
+ private String title ;
197
+ private Integer copies ;
198
+
199
+ public Book (String title , String author , Integer copies ) {
200
+ this .title = title ;
201
+ this .author = author ;
202
+ this .copies = copies ;
203
+ }
204
+
205
+ public String getAuthor () {
206
+ return author ;
207
+ }
208
+
209
+ public void setAuthor (String author ) {
210
+ this .author = author ;
211
+ }
212
+
213
+ public String getTitle () {
214
+ return title ;
215
+ }
216
+
217
+ public void setTitle (String title ) {
218
+ this .title = title ;
219
+ }
220
+
221
+ public Integer getCopies () {
222
+ return copies ;
223
+ }
224
+
225
+ public void setCopies (Integer copies ) {
226
+ this .copies = copies ;
227
+ }
228
+
229
+ @ Override
230
+ public String toString () {
231
+ return "Book [author=" + author + ", title=" + title + ", copies=" + copies + "]" ;
232
+ }
233
+
234
+ }
235
+
236
+ class User2 {
237
+ private String name ;
238
+ private Integer id ;
239
+ private String email ;
240
+
241
+ public User2 (Integer id , String name , String email ) {
242
+ this .name = name ;
243
+ this .id = id ;
244
+ this .email = email ;
245
+ }
246
+
247
+ public String getName () {
248
+ return name ;
249
+ }
250
+
251
+ public void setName (String name ) {
252
+ this .name = name ;
253
+ }
254
+
255
+ public Integer getId () {
256
+ return id ;
257
+ }
258
+
259
+ public void setId (Integer id ) {
260
+ this .id = id ;
261
+ }
262
+
263
+ public String getEmail () {
264
+ return email ;
265
+ }
266
+
267
+ public void setEmail (String email ) {
268
+ this .email = email ;
269
+ }
270
+
271
+ }
272
+
273
+ class Loan {
274
+
275
+ private Map <Integer , List <String >> loans ;
276
+
277
+ public Loan () {
278
+ this .loans = new HashMap <>();
279
+ }
280
+
281
+ public void loanBook (User2 user , Book book ) {
282
+ if (book .getCopies () > 0 ) {
283
+ book .setCopies (book .getCopies () - 1 );
284
+ List <String > booksUser = loans .get (user .getId ()) != null ? loans .get (user .getId ()) : new ArrayList <>();
285
+ booksUser .add (book .getTitle ());
286
+ loans .put (user .getId (), booksUser );
287
+ }
288
+
289
+ }
290
+
291
+ public void returnBook (User2 user , Book book ) {
292
+ boolean exist = this .loans .get (user .getId ()).stream ().anyMatch (b -> b .equals (book .getTitle ()));
293
+ if (exist ) {
294
+ book .setCopies (book .getCopies () + 1 );
295
+ this .loans .get (user .getId ()).remove (book .getTitle ());
296
+ }
297
+ }
298
+
299
+ public Map <Integer , List <String >> getLoans () {
300
+ return loans ;
301
+ }
302
+
303
+ @ Override
304
+ public String toString () {
305
+ return "Loan [loans=" + loans .toString () + "]" ;
306
+ }
307
+
308
+
309
+
310
+ }
0 commit comments