Problema 34
package com.company;
import java.util.ArrayList;
abstract class Amenda{
private String CNP;
public Amenda(String CNP){
this.CNP=CNP;
}
abstract public double getValoareAmenda();
abstract protected String getTip();
public String toString(){
return "\nCNP: " + this.CNP + "\nTip amenda: " + getTip() + "\nValoare amenda: " + getValoareAmenda();
}
public String getCNP(){
return this.CNP;
}
}
class ParcareIlegala extends Amenda{
private static final int AmendaFixa=500;
public ParcareIlegala(String CNP){
super(CNP);
}
public double getValoareAmenda(){
return AmendaFixa;
}
protected String getTip(){
return " Parcare ilegala";
}
}
class AruncatGunoaie extends Amenda{
private int factorZonal;
private static final int coeficientInmultire=200;
public AruncatGunoaie(String CNP, int factorZonal){
super(CNP);
this.factorZonal=factorZonal;
}
public double getValoareAmenda(){
return coeficientInmultire*factorZonal;
}
protected String getTip(){
return "Aruncat gunoaie pe jos";
}
}
class DistrugereaBunurilor extends Amenda{
private double valoareBun;
private static final int coeficientInmultire=300;
public DistrugereaBunurilor(String CNP, double valoareBun){
super(CNP);
this.valoareBun=valoareBun;
}
public double getValoareAmenda(){
return coeficientInmultire*valoareBun;
}
protected String getTip(){
return "Distrugerea bunurilor din parc";
}
}
class ColectieAmenda{
private ArrayList<Amenda> grupAmenzi=new ArrayList<>();
public void add(Amenda amenda){
if(amenda==null){
throw new NullPointerException("Amenda nu poate fi null...Something wrong happend");
}
else{
grupAmenzi.add(amenda);
}
}
public int valoare(Strategie strategie){
double sumaAmenzi=0;
for(Amenda amenda:grupAmenzi)
if(strategie.conditie(amenda))
sumaAmenzi=sumaAmenzi+amenda.getValoareAmenda();
return (int) sumaAmenzi;
}
}
interface Strategie{
public boolean conditie(Amenda amenda);
}
class VerificareCNP implements Strategie{
private String CNP;
public VerificareCNP(String CNP){
this.CNP=CNP;
}
public boolean conditie(Amenda amenda) {
if(amenda.getCNP().equals(this.CNP))
return true;
return false;
}
}
class VerificareParcare implements Strategie{
private static final String tip= ParcareIlegala.class.getTypeName();
public boolean conditie(Amenda amenda){
if(amenda.getClass().getTypeName().equals(tip))
return true;
return false;
}
}
public class Main {
public static void main(String[] args) {
ColectieAmenda grup=new ColectieAmenda();
Amenda amenda=new DistrugereaBunurilor("123",10);
ParcareIlegala amenda1=new ParcareIlegala("1031274456709");
Amenda amenda2=new AruncatGunoaie("1031274456709",2);
grup.add(amenda);
grup.add(amenda1);
grup.add(amenda2);
Strategie strategie=new VerificareCNP("1031274456709");
Strategie strategie1=new VerificareParcare();
System.out.println(grup.valoare(strategie));
System.out.println(grup.valoare(strategie1));
}
}