Created
May 2, 2022 20:59
-
-
Save isicju/78b8f94ef163681a49166cc5e6bf5871 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import com.fasterxml.jackson.core.JsonProcessingException; | |
import com.fasterxml.jackson.dataformat.xml.XmlMapper; | |
import com.google.gson.Gson; | |
import java.util.Arrays; | |
public class Refactoring { | |
final static Converter<Object, String> JSON_CONVERTER = (object) -> { | |
Gson gson = new Gson(); | |
return gson.toJson(object); | |
}; | |
final static Converter<Object, String> XML_CONVERTER = (object) -> { | |
XmlMapper xmlMapper = new XmlMapper(); | |
try { | |
return xmlMapper.writeValueAsString(object); | |
} catch (JsonProcessingException e) { | |
e.printStackTrace(); | |
} | |
return null; | |
}; | |
public static void main(String[] args) throws Exception { | |
Employee regularEmployee = new Employee(39983, 20000, JSON_CONVERTER); | |
Contractor contractor = new Contractor(1111, 60000, 5000, XML_CONVERTER); | |
Arrays.asList(regularEmployee, contractor).forEach( | |
employee -> { | |
employee.makePayment(); | |
employee.printReport(); | |
} | |
); | |
} | |
@FunctionalInterface | |
interface Converter<T, R> { | |
R serialize(T var1); | |
} | |
static class Employee { | |
Converter<Object,String> converter; | |
int accountNumber; | |
int salary; | |
public int getAccountNumber() { | |
return accountNumber; | |
} | |
public int getSalary() { | |
return salary; | |
} | |
public Employee(int accountNumber, int salary, Converter<Object,String> converter) { | |
this.accountNumber = accountNumber; | |
this.salary = salary; | |
this.converter = converter; | |
} | |
public void printReport() { | |
System.out.println("printing regular employee details in json format: " | |
+ converter.serialize(this)); | |
} | |
public void makePayment() { | |
System.out.println("Processing payment for " + accountNumber + " amount: " + (salary)); | |
} | |
} | |
static class Contractor extends Employee { | |
int commission; | |
public int getCommission() { | |
return commission; | |
} | |
public Contractor(int accountNumber, int salary, int commission, Converter<Object,String> converter) { | |
super(accountNumber, salary, converter); | |
this.commission = commission; | |
} | |
@Override | |
public void makePayment() { | |
System.out.println("Processing payment for " + accountNumber | |
+ " amount: " + (salary - commission)); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment