Remove switch statements using polymorphism

“Two books on a desk near a MacBook with lines of code on its screen” by Émile Perron on Unsplash
public class Customer {

public enum Membership {
Bronze, Silver, Gold
}

public Membership membership;

public Customer(Membership membership) {
this.membership = membership;
}

public void setMembership(Membership membership) {
this.membership = membership;
}

public Membership getMembership() {
return membership;
}

public double getMonthlyPrice() {
switch(membership) {
case Bronze:
return 10;
case Silver:
return 20;
case Gold:
return 30;
default:
throw new IllegalArgumentException("Invalid membership!!");
}
}
}
public double getPointsEarned(double amountSpent) {
switch(membership) {
case Bronze:
return amountSpent * 1;
case Silver:
return amountSpent * 2;
case Gold:
return amountSpent * 3;
default:
throw new IllegalArgumentException("Invalid membership!!");
}
}
public interface Member {
double getMonthlyPrice();
double getPointsEarned(double amountSpent);
}

class BronzeMember implements Member {
public double getMonthlyPrice() {
return 10;
}

public double getPointsEarned(double amountSpent) {
return amountSpent * 1;
}
}

class SilverMember implements Member {
public double getMonthlyPrice() {
return 20;
}

public double getPointsEarned(double amountSpent) {
return amountSpent * 2;
}
}

class GoldMember implements Member {
public double getMonthlyPrice() {
return 30;
}

public double getPointsEarned(double amountSpent) {
return amountSpent * 3;
}
}
public class Customer {

public enum Membership {
Bronze, Silver, Gold
}

private Membership membership;
private Member member;

public Customer(Membership membership) {
this.setMembership(membership);
}

public void setMembership(Membership membership) {
this.membership = membership;

switch(membership) {
case Bronze:
this.member = new BronzeMember();
break;
case Silver:
this.member = new SilverMember();
break;
case Gold:
this.member = new GoldMember();
break;
default:
throw new IllegalArgumentException("Invalid membership!!");
}
}

public Membership getMembership() {
return membership;
}

public double getMonthlyPrice() {
return this.member.getMonthlyPrice();
}

public double getPointsEarned(double amountSpent) {
return this.member.getPointsEarned(amountSpent);
}
}

--

--

Lead Software Engineer at A Cloud Guru

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store