Problema 33

import java.util.ArrayList;

abstract class FiguraGeometrica{

private String culoare;

public FiguraGeometrica(String culoare){

this.culoare=culoare;

}

abstract public float calculPerimetru();

public String getCuloare() {

return culoare;

}

public void setCuloare(String culoare) {

this.culoare = culoare;

Observator.getInstance().anunta();//Se putea verifica si daca cumva vechea culoare nu e identica cu noua culoare..

}

}

class Patrat extends FiguraGeometrica{

private float latura;

public Patrat(String culoare, float latura){

super(culoare);

this.latura=latura;

}

public float calculPerimetru(){

return 4*latura;

}

public boolean equals(Object obj) {

if(obj instanceof Patrat)

if(this.latura==((Patrat)obj).latura)

return true;

return false;

}

public float getLatura() {

return latura;

}

public void setLatura(float latura) {

this.latura = latura;

Observator.getInstance().anunta();

}

public String toString() {

return "Patrat:Latura: "+latura;

}

}

class Cerc extends FiguraGeometrica{

private float raza;

public Cerc(String culoare, float raza){

super(culoare);

this.raza=raza;

}

public float calculPerimetru(){

return 0;

}

public boolean equals(Object obj) {

if(obj instanceof Cerc)

return true;

return false;

}

public float getRaza() {

return raza;

}

public void setRaza(float raza) {

this.raza = raza;

Observator.getInstance().anunta();

}

public String toString() {

return "Cerc:Raza: "+raza;

}

}

class Triunghi extends FiguraGeometrica{

private float latura1, latura2, latura3;

public Triunghi(String culoare, float latura1, float latura2, float latura3){

super(culoare);

this.latura1=latura1;

this.latura2=latura2;

this.latura3=latura3;

}

public float calculPerimetru() {

return latura1+latura2+latura3;

}

public boolean equals(Object obj) {

if(obj instanceof Triunghi)

if(this.calculPerimetru()==((Triunghi)obj).calculPerimetru())

return true;

return false;

}

public float getLatura1() {

return latura1;

}

public void setLatura1(float latura1) {

this.latura1 = latura1;

Observator.getInstance().anunta();

}

public float getLatura2() {

return latura2;

}

public void setLatura2(float latura2) {

this.latura2 = latura2;

Observator.getInstance().anunta();

}

public float getLatura3() {

return latura3;

}

public void setLatura3(float latura3) {

this.latura3 = latura3;

Observator.getInstance().anunta();

}

public String toString() {

return "Triunghi:Latura1: "+latura1+" Latura2: "+latura2+" Latura3: "+latura3;

}

}

class Observator {

private static Observator ourInstance = new Observator();

public static Observator getInstance() {

return ourInstance;

}

private Observator() {

}

private ArrayList<FiguraGeometrica>figuri=new ArrayList<>();

public void add(FiguraGeometrica figuraGeometrica){

figuri.add(figuraGeometrica);

}

public String toString(){

StringBuilder result=new StringBuilder();

int colectionSize=figuri.size();

for(int i=0;i<colectionSize;i++)

result.append(figuri.get(i).toString()).append("\n");

return result.toString();

}

public void anunta(){

System.out.println(figuri);

}

}

public class Main {

public static void main(String[] args) {

Observator observator=Observator.getInstance();

Cerc c1=new Cerc("Culoare1",1);

Patrat p1=new Patrat("Culoare2",2);

Triunghi t1=new Triunghi("Culoare3",3,4,5);

observator.add(c1);

observator.add(p1);

observator.add(t1);

c1.setCuloare("Culoare1");

}

}