Design Architecture/Refactoring

Introduce Parameter Object

lipnus 2022. 4. 20. 13:18
반응형

 

before

public class ReplaceParameterWithMethodCall_before {
	static public int quantity;
	static public int itemPrice;
	
	static public double getPrice() {
		int basePrice = quantity * itemPrice;
		int discountLevel;

		if (quantity > 100)
			discountLevel = 2;
		else
			discountLevel = 1;

		double finalPrice = discountedPrice(basePrice, discountLevel);

		return finalPrice;
	}

	static private double discountedPrice(int basePrice, int discountLevel) {
		if (discountLevel == 2)
			return basePrice * 0.1;
		else
			return basePrice * 0.05;
	}

	public static void main(String[] args) {
		quantity = 10;
		itemPrice = 25;
		
		System.out.println("price : " + getPrice());

	}

}

 

after

import java.util.ArrayList;
import java.util.Random;


public class IntroduceParameterObject_before {

	static class Account {
		//...
		private ArrayList<Integer> _entries = new ArrayList<Integer>();
		
		public Account() {
			Random rand = new Random();
			
			int numbers = rand.nextInt(50);
			for(int i = 0; i < numbers; i++) {
				_entries.add(rand.nextInt(50));
			}
			
			printAccount();
		}
		
		public double getFlowBetween (Bound bound) {
			double result = 0;
			for (int each : _entries) {
				
				if (bound.start <= each && each <= bound.end) {
					result += each;
				}
			}
			return result;
		}
		
		public void printAccount() {
			System.out.println(_entries.size());
			for(int num : _entries) {
				System.out.printf("%d ", num);
			}
			System.out.println();
		}
	}
	
	public static class Bound {
		int start;
		int end;
		
		public Bound(int start, int end) {
			this.start = start;
			this.end = end;
		}
	}
		

		
	public static void main(String[] args) {

		Bound bound = new Bound(15, 25);
		
		Account anAccount = new Account();
		double flow = anAccount.getFlowBetween(bound);

		System.out.println(flow);
	}

}
반응형