-
Notifications
You must be signed in to change notification settings - Fork 17
/
DiscountSystem.java
83 lines (69 loc) · 3.27 KB
/
DiscountSystem.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/*
Java AI Powered
========================================================
Desafios de Código Java Intermediários: S.O.L.I.D
========================================================
3/5 - Calculando Desconto
========================================================
Descrição
O Princípio Aberto/Fechado (Open/Closed Principle - OCP), juntamente com o Princípio da Responsabilidade Única (Single Responsibility Principle - SRP), faz parte dos fundamentos do design de software que visam promover a flexibilidade e extensibilidade dos sistemas. Esse princípio enfatiza que uma classe ou módulo deve ser aberto para extensões, permitindo a adição de novas funcionalidades, mas fechado para modificações, evitando alterações frequentes em seu código existente.
Seguindo o Princípio Aberto/Fechado, neste desafio você deve criar uma classe base Discount e classes derivadas para diferentes tipos de descontos, como StudentDiscount e MembershipDiscount. Os estudantes recebem um desconto de 10% e os afiliados recebem um desconto de 15%. Ao seguirmos o OCP, criamos sistemas mais fáceis de estender sem comprometer a estabilidade das partes já implementadas, resultando em códigos mais robustos, coesos e adaptáveis, características essenciais para o desenvolvimento de software escalável e de alta qualidade.
Entrada
A entrada é composta pelo tipo de desconto (estudante ou afiliado) e o valor original exibidos em uma linha separada.
Saída
A saída esperada é o valor com desconto aplicado (double).
Exemplos
A tabela abaixo apresenta exemplos com alguns dados de entrada e suas respectivas saídas esperadas. Certifique-se de testar seu programa com esses exemplos e com outros casos possíveis.
-----------------------
| Entrada | Saída |
-----------------------
| student | 90.00 |
| 100 | |
-----------------------
| membership | 85.00 |
| 100 | |
-----------------------
| membership | 208.25 |
| 245 | |
-----------------------
SOLUÇÃO ABAIXO: */
import java.util.Scanner;
import java.util.Objects;
// Classe base para descontos (aberto para extensões)
class Discount {
public double calculateDiscount(double originalValue) {
return originalValue;
}
}
// Classe derivada para desconto de estudante (10%).
final class StudentDiscount extends Discount {
@Override
public double calculateDiscount(double originalValue) {
return originalValue * 0.9;
}
}
// Classe derivada para desconto de afiliado (15%).
final class MembershipDiscount extends Discount {
@Override
public double calculateDiscount(double originalValue) {
return originalValue * 0.85;
}
}
public class DiscountSystem {
public static void main(String[] args) {
try(Scanner scanner = new Scanner(System.in)) {
String discountType = scanner.next();
double originalValue = scanner.nextDouble();
Discount discount = null;
if ("student".equals(discountType)) {
discount = new StudentDiscount();
} else if ("membership".equals(discountType)) {
discount = new MembershipDiscount();
}
if (Objects.nonNull(discount)) {
double discountValue = discount.calculateDiscount(originalValue);
System.out.printf("%.2f", discountValue);
}
}
}
}