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!
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