Utilice el que el patrón de diseño para volver a escribir el código?

Lang Tuo:

Q: Para los siguientes fragmentos de código, identificar qué patrón de diseño debería haber sido utilizado para mejorar la calidad del código. Vuelva a escribir el código usando el patrón de diseño que ha identificado. Su respuesta debe incluir i) la declaración para describir el patrón de diseño ii) el código Java reescrito, y iii) el resultado de la prueba desde el código Java reescrito.

public class FitnessCustomer {
 private static enum Level {
 BRONZE, SILVER, GOLD
 }
 private Level level;
public void setLevel(Level level) {
this.level = level;
}
 public double getFees() {
 switch (level) {
 case BRONZE: return CustomerConstants.BRONZE_FEES;
 case SILVER: return CustomerConstants.SILVER_FEES;
 case GOLD: return CustomerConstants.GOLD_FEES;
 }
 throw new IllegalStateException("How did I get here?");
}
 public boolean canAccessPool() {
 return (level == Level.SILVER || level == Level.GOLD);
}
 public boolean hasOwnLocker() {
 return (level == Level.GOLD);
}
 public double getEquipmentDiscount() {
 switch (level) {
 case BRONZE: return CustomerConstants.BRONZE_DISCOUNT;
 case SILVER: return CustomerConstants.SILVER_DISCOUNT;
 case GOLD: return CustomerConstants.GOLD_DISCOUNT;
 }
 throw new IllegalStateException("How did I get here?");
 }

Soy un hombre fresco para estudiar el patrón de diseño, y conocer algunos patrones de gustos observan en patrones, decorar-patrón y el patrón de la fábrica ... Pero, sinceramente, no estoy realmente entiendo cómo identificar y utilizarlos para mejorar los códigos . Para la pregunta, creo que el código se puede mejorar el patrón de plantilla causa de la condición física del cliente puede ser como el esqueleto. Y bronce, plata, oro puede ser que las subclases de la aptitud en el cliente. No estoy seguro de que es correcta para la pregunta. Y los códigos son a continuación:

FitnessCustomer.class:

package ASS2_Q2;

public abstract class FitnessCustomer {
    private Level level;

    public final void setLevel(Level level){
        this.level = level
    }

    public final double getFees(){
        switch(level){
            case BRONZE: return CustomerConstants.BRONZE_FEES;
            case SILVER: return CustomerConstants.SILVER_FEES;
             case GOLD: return CustomerConstants.GOLD_FEES; 
        }
        throw new IllegalStateException("How did I get here?");
    }

    public final double getEquipmentDiscount(){
        switch(level){
            case BRONZE: return CustomerConstants.BRONZE_DISCOUNT;
            case SILVER: return CustomerConstants.SILVER_DISCOUNT;
            case GOLD: return CustomerConstants.GOLD_DISCOUNT;
        }
        throw new IllegalStateException("How did I get here?");
    }

    public abstract  boolean canAccessPool();

    public abstract boolean hasOwnLocker();


}

BRONZE.class:

package ASS2_Q2;

public class BRONZE extends FitnessCustomer{
    public BRONZE(){
        this.level = "BRONZE";
    }


    @Override
    public boolean canAccessPool(){
        return false;
    }

    @Override
    public boolean hasOwnLocker(){
        return false;
    }


}

Clase dorada:

package ASS2_Q2;

public class GOLD extends FitnessCustomer{
    public GOLD(){
        this.level = "GOLD";
    }

    @Override
    public boolean canAccessPool(){
        return true;
    }

    @Override
    public boolean hasOwnLocker(){
        return true;
    }

}

SILVER.class:

package ASS2_Q2;

public class SILVER extends FitnessCustomer{

    public SILVER(){
        this.level = "SILVER";
    }


    @Override
    public boolean canAccessPool(){
        return true;
    }

    @Override
    public boolean hasOwnLocker(){
        return false;
    }



}

Quiero preguntar si la respuesta es correcta o no? Por favor, ayúdame! ¡Gracias!

Tarun:

No estoy usando cualquier patrón de diseño particular, pero creo que podríamos diseñarla de manera siguiente:

Usted puede tener interfaces siguientes:

CustomerWithLockerAccess
CustomerWithPoolAccess
CustomerWithEquipmentDiscount

Este interfaz asegura que podemos tener al cliente con cualquier combinación de acceso.

Dado que cada cliente tiene un nivel y tienen que pagar una cuota, puede crear un FitnessCustomer clase abstracta de la siguiente manera:

public abstract class FitnessCustomer {
    private static final Level level;

    public FitnessCustomer(Level level){
       this.level = level
    }

    public Level getLevel(){ return this.level};

    public final double getFees();
  }

A continuación, puede diseñar sus clases de la siguiente manera:

GoldCustomer extends FitnessCustomer implements CustomerWithLockerAccess, CustomerWithPoolAccess, CustomerWithEquipmentDiscount


SilverCustomer extends FitnessCustomer implements CustomerWithPoolAccess, CustomerWithEquipmentDiscount

BronzeCustomer extends FitnessCustomer implements CustomerWithEquipmentDiscount

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=404135&siteId=1
Recomendado
Clasificación