domingo, 7 de junho de 2015

Exemplo - decorator

código fonte zipado aqui.
01 /** Esta Ã© a classe (abstrata) básica.
02     Escolhi este porque creio ser o caso mais simples.
03 */
04 interface Basico {
05    /** Nas classes concretas descreve o modelo, 
06        nos decoradores acrescenta algo.
07    */
08    public String getDescription();
09    /** Nas classes concretas retorna o custo,
10        nos decoradores, inclui o custo da decoração
11       e retorna o custo.
12    */
13    public double getCost();
14 }
Java2html
01 /** Primeiro dos dois modelos básicos que pretendo implementar.
02 */
03 public class Modelo1 implements Basico {
04    /** Nas classes concretas descreve o modelo, 
05        nos decoradores acrescenta algo.
06    */
07    public String getDescription() {
08       return "Carroceria";
09    }
10    /** Nas classes concretas retorna o custo,
11        nos decoradores, inclui o custo da decoração
12       e retorna o custo. Caso valores precisem ser
13       exatos, sem truncar nem arredondar, Ã© melhor
14       usar int e codificá-los em centavos.
15    */
16    public double getCost() {
17       return 10000.00;
18    }
19 }
Java2html
01 /** Decorador.
02 */
03 public class Ar implements Basico {
04    /** Nas classes concretas descreve o modelo, 
05        nos decoradores acrescenta algo.
06    */
07    Basico b;
08    Ar (Basico b) {
09       this.b=b;
10    }
11    public String getDescription() {
12       return b.getDescription() " Ar-condicionado";
13    }
14    /** Nas classes concretas retorna o custo,
15        nos decoradores, inclui o custo da decoração
16       e retorna o custo. Caso valores precisem ser
17       exatos, sem truncar nem arredondar, Ã© melhor
18       usar int e codificá-los em centavos.
19    */
20    public double getCost() {
21       return b.getCost() 3500.00;
22    }
23 }
Java2html
01 /** Decorador.
02 */
03 public class Direcao implements Basico {
04    /** Nas classes concretas descreve o modelo, 
05        nos decoradores acrescenta algo.
06    */
07    Basico b;
08    Direcao (Basico b) {
09       this.b=b;
10    }
11    public String getDescription() {
12       return b.getDescription() " Direção Eletro-assistida";
13    }
14    /** Nas classes concretas retorna o custo,
15        nos decoradores, inclui o custo da decoração
16       e retorna o custo. Caso valores precisem ser
17       exatos, sem truncar nem arredondar, Ã© melhor
18       usar int e codificá-los em centavos.
19    */
20    public double getCost() {
21       return b.getCost() 2000.00;
22    }
23 }
Java2html
01 /** Decorador.
02 */
03 public class DVDplayer implements Basico {
04    /** Nas classes concretas descreve o modelo, 
05        nos decoradores acrescenta algo.
06    */
07    Basico b;
08    DVDplayer (Basico b) {
09       this.b=b;
10    }
11    public String getDescription() {
12       return b.getDescription() " DVD player";
13    }
14    /** Nas classes concretas retorna o custo,
15        nos decoradores, inclui o custo da decoração
16       e retorna o custo. Caso valores precisem ser
17       exatos, sem truncar nem arredondar, Ã© melhor
18       usar int e codificá-los em centavos.
19    */
20    public double getCost() {
21       return b.getCost() 800.00;
22    }
23 }
Java2html
01 class TestaDecorador {
02    public static void main (String[] args) {
03       Basico b = new Modelo1();
04       System.out.println (b.getCost());
05       Basico c = new Ar(new Modelo1());
06       System.out.println (c.getDescription());
07       Basico d = new Direcao(new Ar(new Modelo1()));
08       System.out.println (d.getDescription());
09    }
10 }
Java2html

Nenhum comentário:

Postar um comentário