В: Для следующих фрагментов кода определите, какой шаблон проектирования должен был использоваться для улучшения качества кода. Перепишите код, используя шаблон проектирования, который вы определили. Ваш ответ должен включать: i) утверждение для описания шаблона проектирования, ii) переписанный код Java и iii) результат теста из переписанного кода Java.
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?");
}
Я свободен sh человек, который изучает шаблон проектирования и знает некоторые шаблоны, такие как шаблон наблюдения, шаблон декорирования и шаблон фабрики ... Но, если честно, я не совсем понимаю, как их идентифицировать и использовать для улучшения кодов. Что касается вопроса, я думаю, что код может быть улучшен шаблоном шаблона, потому что фитнес-клиент может быть скелетом. И BRONZE, SILVER, GOLD могут быть подклассами для фитнес-клиента. Я не уверен, что это правильно для вопроса. И коды ниже:
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;
}
}
GOLD.class:
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;
}
}
Я хочу спросить, является ли ответ правильным? Пожалуйста, помогите мне! Спасибо!