Skip to content

作業履歴 2017-04-11

概要

2017-04-11の作業内容をまとめています。

コミット: 83e97c0

メッセージ

Payrollパッケージ3

変更されたファイル

  • M META-INF/ServiceCharge.txt
  • M src/main/java/PayrollImplementation/PayrollFactoryImplementation.java
  • M src/main/java/TransactionImplementation/TransactionFactoryImplementation.java
  • M src/test/java/Main.java
  • M src/test/java/TestPayroll.java

変更内容

commit 83e97c0f87b39d1640d6f78b48f4a6d859a16a8d
Author: k2works <kakimomokuri@gmail.com>
Date:   Tue Apr 11 15:23:51 2017 +0900

    Payrollパッケージ3

diff --git a/META-INF/ServiceCharge.txt b/META-INF/ServiceCharge.txt
index 8278b65..88e1c7a 100644
--- a/META-INF/ServiceCharge.txt
+++ b/META-INF/ServiceCharge.txt
@@ -1 +1 @@
-Affiliations.ServiceCharge 86 2001/10/31 12.95
\ No newline at end of file
+ServiceCharge 86 2001/10/31 12.95
\ No newline at end of file
diff --git a/src/main/java/GeneralTransactions/AddEmployeeTransaction.java b/src/main/java/AbstractTransacions/AddEmployeeTransaction.java
similarity index 86%
rename from src/main/java/GeneralTransactions/AddEmployeeTransaction.java
rename to src/main/java/AbstractTransacions/AddEmployeeTransaction.java
index dbaaf83..7d2272c 100644
--- a/src/main/java/GeneralTransactions/AddEmployeeTransaction.java
+++ b/src/main/java/AbstractTransacions/AddEmployeeTransaction.java
@@ -1,6 +1,6 @@
-package GeneralTransactions;
+package AbstractTransacions;

-import Methods.HoldMethod;
+import PayrollImplementation.HoldMethod;
 import PayrollDatabase.GlobalDatabase;
 import PayrollDomain.Employee;
 import PayrollDomain.PaymentClassification;
@@ -36,7 +36,7 @@ public abstract class AddEmployeeTransaction implements Transaction {
         GlobalDatabase.payrollDB.AddEmployee(itsEmpId, e);
     }

-    abstract PaymentSchedule GetSchedule();
+    public abstract PaymentSchedule GetSchedule();

-    abstract PaymentClassification GetClassification();
+    public abstract PaymentClassification GetClassification();
 }
diff --git a/src/main/java/AffiliationTransactions/ChangeAffiliationTransaction.java b/src/main/java/AbstractTransacions/ChangeAffiliationTransaction.java
similarity index 69%
rename from src/main/java/AffiliationTransactions/ChangeAffiliationTransaction.java
rename to src/main/java/AbstractTransacions/ChangeAffiliationTransaction.java
index 49c71f7..b7ad26f 100644
--- a/src/main/java/AffiliationTransactions/ChangeAffiliationTransaction.java
+++ b/src/main/java/AbstractTransacions/ChangeAffiliationTransaction.java
@@ -1,6 +1,5 @@
-package AffiliationTransactions;
+package AbstractTransacions;

-import GeneralTransactions.ChangeEmployeeTransaction;
 import PayrollDomain.Affiliation;
 import PayrollDomain.Employee;

@@ -17,7 +16,7 @@ public abstract class ChangeAffiliationTransaction extends ChangeEmployeeTransac
         e.SetAffiliation(GetAffiliation());
     }

-    abstract void RecordMembership(Employee e);
+    public abstract void RecordMembership(Employee e);

-    abstract Affiliation GetAffiliation();
+    public abstract Affiliation GetAffiliation();
 }
diff --git a/src/main/java/ClassificationTransactions/ChangeClassificationTransaction.java b/src/main/java/AbstractTransacions/ChangeClassificationTransaction.java
similarity index 71%
rename from src/main/java/ClassificationTransactions/ChangeClassificationTransaction.java
rename to src/main/java/AbstractTransacions/ChangeClassificationTransaction.java
index a79b3ee..5d5fa68 100644
--- a/src/main/java/ClassificationTransactions/ChangeClassificationTransaction.java
+++ b/src/main/java/AbstractTransacions/ChangeClassificationTransaction.java
@@ -1,6 +1,5 @@
-package ClassificationTransactions;
+package AbstractTransacions;

-import GeneralTransactions.ChangeEmployeeTransaction;
 import PayrollDomain.Employee;
 import PayrollDomain.PaymentClassification;
 import PayrollDomain.PaymentSchedule;
@@ -19,7 +18,7 @@ public abstract class ChangeClassificationTransaction extends ChangeEmployeeTran
         e.SetClassification(GetClassification());
     }

-    abstract PaymentSchedule GetSchedule();
+    public abstract PaymentSchedule GetSchedule();

-    abstract PaymentClassification GetClassification();
+    public abstract PaymentClassification GetClassification();
 }
diff --git a/src/main/java/GeneralTransactions/ChangeEmployeeTransaction.java b/src/main/java/AbstractTransacions/ChangeEmployeeTransaction.java
similarity index 95%
rename from src/main/java/GeneralTransactions/ChangeEmployeeTransaction.java
rename to src/main/java/AbstractTransacions/ChangeEmployeeTransaction.java
index d7b5884..f18c2e3 100644
--- a/src/main/java/GeneralTransactions/ChangeEmployeeTransaction.java
+++ b/src/main/java/AbstractTransacions/ChangeEmployeeTransaction.java
@@ -1,4 +1,4 @@
-package GeneralTransactions;
+package AbstractTransacions;

 import PayrollDatabase.GlobalDatabase;
 import PayrollDomain.Employee;
diff --git a/src/main/java/MethodTransactions/ChangeMethodTransaction.java b/src/main/java/AbstractTransacions/ChangeMethodTransaction.java
similarity index 74%
rename from src/main/java/MethodTransactions/ChangeMethodTransaction.java
rename to src/main/java/AbstractTransacions/ChangeMethodTransaction.java
index fbd62bb..b891006 100644
--- a/src/main/java/MethodTransactions/ChangeMethodTransaction.java
+++ b/src/main/java/AbstractTransacions/ChangeMethodTransaction.java
@@ -1,6 +1,5 @@
-package MethodTransactions;
+package AbstractTransacions;

-import GeneralTransactions.ChangeEmployeeTransaction;
 import PayrollDomain.Employee;
 import PayrollDomain.PaymentMethod;

@@ -16,5 +15,5 @@ public abstract class ChangeMethodTransaction extends ChangeEmployeeTransaction
         e.SetMethod(GetMethod());
     }

-    abstract PaymentMethod GetMethod();
+    public abstract PaymentMethod GetMethod();
 }
diff --git a/src/main/java/Schedules/BiweeklySchedule.java b/src/main/java/PayrollImplementation/BiweeklySchedule.java
similarity index 97%
rename from src/main/java/Schedules/BiweeklySchedule.java
rename to src/main/java/PayrollImplementation/BiweeklySchedule.java
index 1376b0b..e27a455 100644
--- a/src/main/java/Schedules/BiweeklySchedule.java
+++ b/src/main/java/PayrollImplementation/BiweeklySchedule.java
@@ -1,4 +1,4 @@
-package Schedules;
+package PayrollImplementation;

 import java.util.Calendar;
 import java.util.GregorianCalendar;
diff --git a/src/main/java/Classifications/CommissionedClassification.java b/src/main/java/PayrollImplementation/CommissionedClassification.java
similarity index 97%
rename from src/main/java/Classifications/CommissionedClassification.java
rename to src/main/java/PayrollImplementation/CommissionedClassification.java
index 33a3863..2eb75dd 100644
--- a/src/main/java/Classifications/CommissionedClassification.java
+++ b/src/main/java/PayrollImplementation/CommissionedClassification.java
@@ -1,4 +1,4 @@
-package Classifications;
+package PayrollImplementation;

 import java.util.Calendar;
 import java.util.HashMap;
diff --git a/src/main/java/Methods/DirectMethod.java b/src/main/java/PayrollImplementation/DirectMethod.java
similarity index 94%
rename from src/main/java/Methods/DirectMethod.java
rename to src/main/java/PayrollImplementation/DirectMethod.java
index ce89efe..976fb85 100644
--- a/src/main/java/Methods/DirectMethod.java
+++ b/src/main/java/PayrollImplementation/DirectMethod.java
@@ -1,4 +1,4 @@
-package Methods;
+package PayrollImplementation;

 import PayrollDomain.Paycheck;
 import PayrollDomain.PaymentMethod;
diff --git a/src/main/java/Methods/HoldMethod.java b/src/main/java/PayrollImplementation/HoldMethod.java
similarity index 87%
rename from src/main/java/Methods/HoldMethod.java
rename to src/main/java/PayrollImplementation/HoldMethod.java
index 062caf4..b22ccaf 100644
--- a/src/main/java/Methods/HoldMethod.java
+++ b/src/main/java/PayrollImplementation/HoldMethod.java
@@ -1,4 +1,4 @@
-package Methods;
+package PayrollImplementation;

 import PayrollDomain.Paycheck;
 import PayrollDomain.PaymentMethod;
diff --git a/src/main/java/Classifications/HourlyClassification.java b/src/main/java/PayrollImplementation/HourlyClassification.java
similarity index 97%
rename from src/main/java/Classifications/HourlyClassification.java
rename to src/main/java/PayrollImplementation/HourlyClassification.java
index 8316231..3949401 100644
--- a/src/main/java/Classifications/HourlyClassification.java
+++ b/src/main/java/PayrollImplementation/HourlyClassification.java
@@ -1,4 +1,4 @@
-package Classifications;
+package PayrollImplementation;

 import java.util.Calendar;
 import java.util.HashMap;
diff --git a/src/main/java/Methods/MailMethod.java b/src/main/java/PayrollImplementation/MailMethod.java
similarity index 92%
rename from src/main/java/Methods/MailMethod.java
rename to src/main/java/PayrollImplementation/MailMethod.java
index bd38045..f3da4e8 100644
--- a/src/main/java/Methods/MailMethod.java
+++ b/src/main/java/PayrollImplementation/MailMethod.java
@@ -1,4 +1,4 @@
-package Methods;
+package PayrollImplementation;

 import PayrollDomain.Paycheck;
 import PayrollDomain.PaymentMethod;
diff --git a/src/main/java/Schedules/MonthlySchedule.java b/src/main/java/PayrollImplementation/MonthlySchedule.java
similarity index 96%
rename from src/main/java/Schedules/MonthlySchedule.java
rename to src/main/java/PayrollImplementation/MonthlySchedule.java
index 2a82c93..eee6a77 100644
--- a/src/main/java/Schedules/MonthlySchedule.java
+++ b/src/main/java/PayrollImplementation/MonthlySchedule.java
@@ -1,4 +1,4 @@
-package Schedules;
+package PayrollImplementation;

 import PayrollDomain.PaymentSchedule;

diff --git a/src/main/java/Affiliations/PaycheckImplementation.java b/src/main/java/PayrollImplementation/PaycheckImplementation.java
similarity index 97%
rename from src/main/java/Affiliations/PaycheckImplementation.java
rename to src/main/java/PayrollImplementation/PaycheckImplementation.java
index d207fb1..07ca927 100644
--- a/src/main/java/Affiliations/PaycheckImplementation.java
+++ b/src/main/java/PayrollImplementation/PaycheckImplementation.java
@@ -1,4 +1,4 @@
-package Affiliations;
+package PayrollImplementation;

 import java.util.Calendar;

diff --git a/src/main/java/PayrollImplementation/PayrollFactoryImplementation.java b/src/main/java/PayrollImplementation/PayrollFactoryImplementation.java
index 200f00a..166caf9 100644
--- a/src/main/java/PayrollImplementation/PayrollFactoryImplementation.java
+++ b/src/main/java/PayrollImplementation/PayrollFactoryImplementation.java
@@ -2,15 +2,6 @@ package PayrollImplementation;

 import java.util.Calendar;

-import Affiliations.PaycheckImplementation;
-import Affiliations.UnionAffiliation;
-import Classifications.CommissionedClassification;
-import Classifications.HourlyClassification;
-import Classifications.SalariedClassification;
-import Classifications.SalesReceipt;
-import Methods.DirectMethod;
-import Methods.HoldMethod;
-import Methods.MailMethod;
 import PayrollDomain.Affiliation;
 import PayrollDomain.Employee;
 import PayrollDomain.NoAffiliation;
@@ -19,9 +10,6 @@ import PayrollDomain.PaymentClassification;
 import PayrollDomain.PaymentMethod;
 import PayrollDomain.PaymentSchedule;
 import PayrollFactory.PayrollFactory;
-import Schedules.BiweeklySchedule;
-import Schedules.MonthlySchedule;
-import Schedules.WeeklySchedule;

 /**
  * Created by k2works on 2017/04/10.
diff --git a/src/main/java/Classifications/SalariedClassification.java b/src/main/java/PayrollImplementation/SalariedClassification.java
similarity index 93%
rename from src/main/java/Classifications/SalariedClassification.java
rename to src/main/java/PayrollImplementation/SalariedClassification.java
index 032437d..0494cb0 100644
--- a/src/main/java/Classifications/SalariedClassification.java
+++ b/src/main/java/PayrollImplementation/SalariedClassification.java
@@ -1,4 +1,4 @@
-package Classifications;
+package PayrollImplementation;

 import PayrollDomain.Paycheck;
 import PayrollDomain.PaymentClassification;
diff --git a/src/main/java/Classifications/SalesReceipt.java b/src/main/java/PayrollImplementation/SalesReceipt.java
similarity index 93%
rename from src/main/java/Classifications/SalesReceipt.java
rename to src/main/java/PayrollImplementation/SalesReceipt.java
index 94a6395..98ce86b 100644
--- a/src/main/java/Classifications/SalesReceipt.java
+++ b/src/main/java/PayrollImplementation/SalesReceipt.java
@@ -1,4 +1,4 @@
-package Classifications;
+package PayrollImplementation;

 import java.util.Calendar;

diff --git a/src/main/java/Affiliations/ServiceCharge.java b/src/main/java/PayrollImplementation/ServiceCharge.java
similarity index 92%
rename from src/main/java/Affiliations/ServiceCharge.java
rename to src/main/java/PayrollImplementation/ServiceCharge.java
index dde8671..22dc59c 100644
--- a/src/main/java/Affiliations/ServiceCharge.java
+++ b/src/main/java/PayrollImplementation/ServiceCharge.java
@@ -1,4 +1,4 @@
-package Affiliations;
+package PayrollImplementation;

 import java.util.Calendar;

diff --git a/src/main/java/Classifications/TimeCard.java b/src/main/java/PayrollImplementation/TimeCard.java
similarity index 92%
rename from src/main/java/Classifications/TimeCard.java
rename to src/main/java/PayrollImplementation/TimeCard.java
index 17a82d9..92ccb8c 100644
--- a/src/main/java/Classifications/TimeCard.java
+++ b/src/main/java/PayrollImplementation/TimeCard.java
@@ -1,4 +1,4 @@
-package Classifications;
+package PayrollImplementation;

 import java.util.Calendar;

diff --git a/src/main/java/Affiliations/UnionAffiliation.java b/src/main/java/PayrollImplementation/UnionAffiliation.java
similarity index 96%
rename from src/main/java/Affiliations/UnionAffiliation.java
rename to src/main/java/PayrollImplementation/UnionAffiliation.java
index 71165b6..6100dfb 100644
--- a/src/main/java/Affiliations/UnionAffiliation.java
+++ b/src/main/java/PayrollImplementation/UnionAffiliation.java
@@ -1,4 +1,4 @@
-package Affiliations;
+package PayrollImplementation;

 import java.util.Calendar;
 import java.util.HashMap;
@@ -6,6 +6,7 @@ import java.util.Map;

 import PayrollDomain.Affiliation;
 import PayrollDomain.Paycheck;
+import PayrollImplementation.ServiceCharge;
 import PayrollUtil.Date;

 /**
diff --git a/src/main/java/Schedules/WeeklySchedule.java b/src/main/java/PayrollImplementation/WeeklySchedule.java
similarity index 94%
rename from src/main/java/Schedules/WeeklySchedule.java
rename to src/main/java/PayrollImplementation/WeeklySchedule.java
index d2d1f93..c36e922 100644
--- a/src/main/java/Schedules/WeeklySchedule.java
+++ b/src/main/java/PayrollImplementation/WeeklySchedule.java
@@ -1,4 +1,4 @@
-package Schedules;
+package PayrollImplementation;

 import PayrollDomain.PaymentSchedule;

diff --git a/src/main/java/GeneralTransactions/AddCommissionedEmployee.java b/src/main/java/TransactionImplementation/AddCommissionedEmployee.java
similarity index 64%
rename from src/main/java/GeneralTransactions/AddCommissionedEmployee.java
rename to src/main/java/TransactionImplementation/AddCommissionedEmployee.java
index c905f1b..97c091d 100644
--- a/src/main/java/GeneralTransactions/AddCommissionedEmployee.java
+++ b/src/main/java/TransactionImplementation/AddCommissionedEmployee.java
@@ -1,10 +1,9 @@
-package GeneralTransactions;
+package TransactionImplementation;

-import Classifications.CommissionedClassification;
+import AbstractTransacions.AddEmployeeTransaction;
 import PayrollDomain.PaymentClassification;
 import PayrollDomain.PaymentSchedule;
 import PayrollFactory.PayrollFactory;
-import Schedules.BiweeklySchedule;

 /**
  * Created by k2works on 2017/04/06.
@@ -19,11 +18,11 @@ public class AddCommissionedEmployee extends AddEmployeeTransaction {
         itsCommissionRate = commissionRate;
     }

-    PaymentClassification GetClassification() {
-        return new CommissionedClassification(itsSalary, itsCommissionRate);
+    public PaymentClassification GetClassification() {
+        return itsPayrollFactory.makeCommissionedClassification(itsSalary, itsCommissionRate);
     }

-    PaymentSchedule GetSchedule() {
-        return new BiweeklySchedule();
+    public PaymentSchedule GetSchedule() {
+        return itsPayrollFactory.makeBiweeklySchedule();
     }
 }
diff --git a/src/main/java/GeneralTransactions/AddHourlyEmployee.java b/src/main/java/TransactionImplementation/AddHourlyEmployee.java
similarity index 54%
rename from src/main/java/GeneralTransactions/AddHourlyEmployee.java
rename to src/main/java/TransactionImplementation/AddHourlyEmployee.java
index 2c85ab4..efdfc68 100644
--- a/src/main/java/GeneralTransactions/AddHourlyEmployee.java
+++ b/src/main/java/TransactionImplementation/AddHourlyEmployee.java
@@ -1,10 +1,11 @@
-package GeneralTransactions;
+package TransactionImplementation;

-import Classifications.HourlyClassification;
+import AbstractTransacions.AddEmployeeTransaction;
+import PayrollImplementation.HourlyClassification;
 import PayrollDomain.PaymentClassification;
 import PayrollDomain.PaymentSchedule;
 import PayrollFactory.PayrollFactory;
-import Schedules.WeeklySchedule;
+import PayrollImplementation.WeeklySchedule;

 /**
  * Created by k2works on 2017/04/06.
@@ -17,11 +18,11 @@ public class AddHourlyEmployee extends AddEmployeeTransaction {
         itsHourlyRate = hourlyRate;
     }

-    PaymentClassification GetClassification() {
-        return new HourlyClassification(itsHourlyRate);
+    public PaymentClassification GetClassification() {
+        return itsPayrollFactory.makeHourlyClassification(itsHourlyRate);
     }

-    PaymentSchedule GetSchedule() {
-        return new WeeklySchedule();
+    public PaymentSchedule GetSchedule() {
+        return itsPayrollFactory.makeWeeklySchedule();
     }
 }
diff --git a/src/main/java/GeneralTransactions/AddSalariedEmployee.java b/src/main/java/TransactionImplementation/AddSalariedEmployee.java
similarity index 65%
rename from src/main/java/GeneralTransactions/AddSalariedEmployee.java
rename to src/main/java/TransactionImplementation/AddSalariedEmployee.java
index f7e182a..89e0c17 100644
--- a/src/main/java/GeneralTransactions/AddSalariedEmployee.java
+++ b/src/main/java/TransactionImplementation/AddSalariedEmployee.java
@@ -1,10 +1,11 @@
-package GeneralTransactions;
+package TransactionImplementation;

-import Classifications.SalariedClassification;
+import AbstractTransacions.AddEmployeeTransaction;
+import PayrollImplementation.SalariedClassification;
 import PayrollDomain.PaymentClassification;
 import PayrollDomain.PaymentSchedule;
 import PayrollFactory.PayrollFactory;
-import Schedules.MonthlySchedule;
+import PayrollImplementation.MonthlySchedule;

 /**
  * Created by k2works on 2017/04/06.
@@ -18,10 +19,10 @@ public class AddSalariedEmployee extends AddEmployeeTransaction {
     }

     public PaymentClassification GetClassification() {
-        return new SalariedClassification(itsSalary);
+        return itsPayrollFactory.makeSalariedClassification(itsSalary);
     }

     public PaymentSchedule GetSchedule() {
-        return new MonthlySchedule();
+        return itsPayrollFactory.makeMonthlySchedule();
     }
 }
diff --git a/src/main/java/GeneralTransactions/ChangeAddressTransaction.java b/src/main/java/TransactionImplementation/ChangeAddressTransaction.java
similarity index 81%
rename from src/main/java/GeneralTransactions/ChangeAddressTransaction.java
rename to src/main/java/TransactionImplementation/ChangeAddressTransaction.java
index 391d035..2b4831d 100644
--- a/src/main/java/GeneralTransactions/ChangeAddressTransaction.java
+++ b/src/main/java/TransactionImplementation/ChangeAddressTransaction.java
@@ -1,5 +1,6 @@
-package GeneralTransactions;
+package TransactionImplementation;

+import AbstractTransacions.ChangeEmployeeTransaction;
 import PayrollDomain.Employee;

 /**
diff --git a/src/main/java/ClassificationTransactions/ChangeCommissionedTransaction.java b/src/main/java/TransactionImplementation/ChangeCommissionedTransaction.java
similarity index 65%
rename from src/main/java/ClassificationTransactions/ChangeCommissionedTransaction.java
rename to src/main/java/TransactionImplementation/ChangeCommissionedTransaction.java
index 3171d8f..5cbd115 100644
--- a/src/main/java/ClassificationTransactions/ChangeCommissionedTransaction.java
+++ b/src/main/java/TransactionImplementation/ChangeCommissionedTransaction.java
@@ -1,10 +1,9 @@
-package ClassificationTransactions;
+package TransactionImplementation;

-import Classifications.CommissionedClassification;
+import AbstractTransacions.ChangeClassificationTransaction;
 import PayrollDomain.PaymentClassification;
 import PayrollDomain.PaymentSchedule;
 import PayrollFactory.PayrollFactory;
-import Schedules.BiweeklySchedule;

 /**
  * Created by k2works on 2017/04/07.
@@ -21,11 +20,11 @@ public class ChangeCommissionedTransaction extends ChangeClassificationTransacti
         itsPayrollFactory = payrollFactory;
     }

-    PaymentSchedule GetSchedule() {
-        return new BiweeklySchedule();
+    public PaymentSchedule GetSchedule() {
+        return itsPayrollFactory.makeBiweeklySchedule();
     }

-    PaymentClassification GetClassification() {
-        return new CommissionedClassification(itsSalary, itsHourlyRate);
+    public PaymentClassification GetClassification() {
+        return itsPayrollFactory.makeCommissionedClassification(itsSalary, itsHourlyRate);
     }
 }
diff --git a/src/main/java/MethodTransactions/ChangeDirectTransaction.java b/src/main/java/TransactionImplementation/ChangeDirectTransaction.java
similarity index 69%
rename from src/main/java/MethodTransactions/ChangeDirectTransaction.java
rename to src/main/java/TransactionImplementation/ChangeDirectTransaction.java
index 9325dee..7522820 100644
--- a/src/main/java/MethodTransactions/ChangeDirectTransaction.java
+++ b/src/main/java/TransactionImplementation/ChangeDirectTransaction.java
@@ -1,6 +1,7 @@
-package MethodTransactions;
+package TransactionImplementation;

-import Methods.DirectMethod;
+import AbstractTransacions.ChangeMethodTransaction;
+import PayrollImplementation.DirectMethod;
 import PayrollDomain.PaymentMethod;
 import PayrollFactory.PayrollFactory;

@@ -19,7 +20,7 @@ public class ChangeDirectTransaction extends ChangeMethodTransaction {
         itsPayrollFactory = payrollFactory;
     }

-    PaymentMethod GetMethod() {
-        return new DirectMethod(itsBank,itsAccount);
+    public PaymentMethod GetMethod() {
+        return itsPayrollFactory.makeDirectMethod(itsBank, itsAccount);
     }
 }
diff --git a/src/main/java/MethodTransactions/ChangeHoldTransaction.java b/src/main/java/TransactionImplementation/ChangeHoldTransaction.java
similarity index 57%
rename from src/main/java/MethodTransactions/ChangeHoldTransaction.java
rename to src/main/java/TransactionImplementation/ChangeHoldTransaction.java
index 68b4e0b..623ad1c 100644
--- a/src/main/java/MethodTransactions/ChangeHoldTransaction.java
+++ b/src/main/java/TransactionImplementation/ChangeHoldTransaction.java
@@ -1,6 +1,7 @@
-package MethodTransactions;
+package TransactionImplementation;

-import Methods.HoldMethod;
+import AbstractTransacions.ChangeMethodTransaction;
+import PayrollImplementation.HoldMethod;
 import PayrollDomain.PaymentMethod;
 import PayrollFactory.PayrollFactory;

@@ -12,9 +13,10 @@ public class ChangeHoldTransaction extends ChangeMethodTransaction {

     public ChangeHoldTransaction(int empId, PayrollFactory payrollFactory) {
         super(empId);
+        itsPayrollFactory = payrollFactory;
     }

-    PaymentMethod GetMethod() {
-        return new HoldMethod();
+    public PaymentMethod GetMethod() {
+        return itsPayrollFactory.makeHoldMethod();
     }
 }
diff --git a/src/main/java/ClassificationTransactions/ChangeHourlyTransaction.java b/src/main/java/TransactionImplementation/ChangeHourlyTransaction.java
similarity index 55%
rename from src/main/java/ClassificationTransactions/ChangeHourlyTransaction.java
rename to src/main/java/TransactionImplementation/ChangeHourlyTransaction.java
index 8b385f1..5352074 100644
--- a/src/main/java/ClassificationTransactions/ChangeHourlyTransaction.java
+++ b/src/main/java/TransactionImplementation/ChangeHourlyTransaction.java
@@ -1,9 +1,10 @@
-package ClassificationTransactions;
+package TransactionImplementation;

-import Classifications.HourlyClassification;
+import AbstractTransacions.ChangeClassificationTransaction;
+import PayrollImplementation.HourlyClassification;
 import PayrollDomain.PaymentClassification;
 import PayrollDomain.PaymentSchedule;
-import Schedules.WeeklySchedule;
+import PayrollImplementation.WeeklySchedule;
 import PayrollFactory.PayrollFactory;

 /**
@@ -19,11 +20,12 @@ public class ChangeHourlyTransaction extends ChangeClassificationTransaction {
         itsPayrollFactory = payrollFactory;
     }

-    PaymentSchedule GetSchedule() {
-        return new WeeklySchedule();
+
+    public PaymentSchedule GetSchedule() {
+        return itsPayrollFactory.makeWeeklySchedule();
     }

-    PaymentClassification GetClassification() {
-        return new HourlyClassification(itsRate);
+    public PaymentClassification GetClassification() {
+        return itsPayrollFactory.makeHourlyClassification(itsRate);
     }
 }
diff --git a/src/main/java/MethodTransactions/ChangeMailTransaction.java b/src/main/java/TransactionImplementation/ChangeMailTransaction.java
similarity index 67%
rename from src/main/java/MethodTransactions/ChangeMailTransaction.java
rename to src/main/java/TransactionImplementation/ChangeMailTransaction.java
index 0dd5949..3604672 100644
--- a/src/main/java/MethodTransactions/ChangeMailTransaction.java
+++ b/src/main/java/TransactionImplementation/ChangeMailTransaction.java
@@ -1,6 +1,7 @@
-package MethodTransactions;
+package TransactionImplementation;

-import Methods.MailMethod;
+import AbstractTransacions.ChangeMethodTransaction;
+import PayrollImplementation.MailMethod;
 import PayrollDomain.PaymentMethod;
 import PayrollFactory.PayrollFactory;

@@ -17,7 +18,7 @@ public class ChangeMailTransaction extends ChangeMethodTransaction {
         itsPayrollFactory = payrollFactory;
     }

-    PaymentMethod GetMethod() {
-        return new MailMethod(itsAddress);
+    public PaymentMethod GetMethod() {
+        return itsPayrollFactory.makeMailMethod(itsAddress);
     }
 }
diff --git a/src/main/java/AffiliationTransactions/ChangeMemberTransaction.java b/src/main/java/TransactionImplementation/ChangeMemberTransaction.java
similarity index 78%
rename from src/main/java/AffiliationTransactions/ChangeMemberTransaction.java
rename to src/main/java/TransactionImplementation/ChangeMemberTransaction.java
index 26068be..0086c78 100644
--- a/src/main/java/AffiliationTransactions/ChangeMemberTransaction.java
+++ b/src/main/java/TransactionImplementation/ChangeMemberTransaction.java
@@ -1,6 +1,7 @@
-package AffiliationTransactions;
+package TransactionImplementation;

-import Affiliations.UnionAffiliation;
+import AbstractTransacions.ChangeAffiliationTransaction;
+import PayrollImplementation.UnionAffiliation;
 import PayrollDatabase.GlobalDatabase;
 import PayrollDomain.Affiliation;
 import PayrollDomain.Employee;
@@ -22,7 +23,7 @@ public class ChangeMemberTransaction extends ChangeAffiliationTransaction {
     }

     public Affiliation GetAffiliation() {
-        return new UnionAffiliation(itsMemberId, itsDues);
+        return itsPayrollFactory.makeUnionAffiliation(itsMemberId, itsDues);
     }

     public void RecordMembership(Employee e) {
diff --git a/src/main/java/GeneralTransactions/ChangeNameTransaction.java b/src/main/java/TransactionImplementation/ChangeNameTransaction.java
similarity index 80%
rename from src/main/java/GeneralTransactions/ChangeNameTransaction.java
rename to src/main/java/TransactionImplementation/ChangeNameTransaction.java
index fc40bb0..245e9ab 100644
--- a/src/main/java/GeneralTransactions/ChangeNameTransaction.java
+++ b/src/main/java/TransactionImplementation/ChangeNameTransaction.java
@@ -1,5 +1,6 @@
-package GeneralTransactions;
+package TransactionImplementation;

+import AbstractTransacions.ChangeEmployeeTransaction;
 import PayrollDomain.Employee;

 /**
diff --git a/src/main/java/ClassificationTransactions/ChangeSalariedTransaction.java b/src/main/java/TransactionImplementation/ChangeSalariedTransaction.java
similarity index 56%
rename from src/main/java/ClassificationTransactions/ChangeSalariedTransaction.java
rename to src/main/java/TransactionImplementation/ChangeSalariedTransaction.java
index c9564ed..5a2b8bf 100644
--- a/src/main/java/ClassificationTransactions/ChangeSalariedTransaction.java
+++ b/src/main/java/TransactionImplementation/ChangeSalariedTransaction.java
@@ -1,9 +1,10 @@
-package ClassificationTransactions;
+package TransactionImplementation;

-import Classifications.SalariedClassification;
+import AbstractTransacions.ChangeClassificationTransaction;
+import PayrollImplementation.SalariedClassification;
 import PayrollDomain.PaymentClassification;
 import PayrollDomain.PaymentSchedule;
-import Schedules.MonthlySchedule;
+import PayrollImplementation.MonthlySchedule;
 import PayrollFactory.PayrollFactory;

 /**
@@ -19,11 +20,11 @@ public class ChangeSalariedTransaction extends ChangeClassificationTransaction {
         itsPayrollFactory = payrollFactory;
     }

-    PaymentSchedule GetSchedule() {
-        return new MonthlySchedule();
+    public PaymentSchedule GetSchedule() {
+        return itsPayrollFactory.makeMonthlySchedule();
     }

-    PaymentClassification GetClassification() {
-        return new SalariedClassification(itsSalary);
+    public PaymentClassification GetClassification() {
+        return itsPayrollFactory.makeSalariedClassification(itsSalary);
     }
 }
diff --git a/src/main/java/AffiliationTransactions/ChangeUnaffiliatedTransaction.java b/src/main/java/TransactionImplementation/ChangeUnaffiliatedTransaction.java
similarity index 82%
rename from src/main/java/AffiliationTransactions/ChangeUnaffiliatedTransaction.java
rename to src/main/java/TransactionImplementation/ChangeUnaffiliatedTransaction.java
index 1714cde..b5d1bb6 100644
--- a/src/main/java/AffiliationTransactions/ChangeUnaffiliatedTransaction.java
+++ b/src/main/java/TransactionImplementation/ChangeUnaffiliatedTransaction.java
@@ -1,6 +1,7 @@
-package AffiliationTransactions;
+package TransactionImplementation;

-import Affiliations.UnionAffiliation;
+import AbstractTransacions.ChangeAffiliationTransaction;
+import PayrollImplementation.UnionAffiliation;
 import PayrollDatabase.GlobalDatabase;
 import PayrollDomain.Affiliation;
 import PayrollDomain.Employee;
@@ -19,7 +20,7 @@ public class ChangeUnaffiliatedTransaction extends ChangeAffiliationTransaction
     }

     public Affiliation GetAffiliation() {
-        return new NoAffiliation();
+        return itsPayrollFactory.makeNoAffiliation();
     }

     public void RecordMembership(Employee e) {
diff --git a/src/main/java/GeneralTransactions/DeleteEmployeeTransaction.java b/src/main/java/TransactionImplementation/DeleteEmployeeTransaction.java
similarity index 91%
rename from src/main/java/GeneralTransactions/DeleteEmployeeTransaction.java
rename to src/main/java/TransactionImplementation/DeleteEmployeeTransaction.java
index 43eb184..6bd4b33 100644
--- a/src/main/java/GeneralTransactions/DeleteEmployeeTransaction.java
+++ b/src/main/java/TransactionImplementation/DeleteEmployeeTransaction.java
@@ -1,4 +1,4 @@
-package GeneralTransactions;
+package TransactionImplementation;

 import PayrollDatabase.GlobalDatabase;
 import TransactionApplication.Transaction;
diff --git a/src/main/java/GeneralTransactions/PaydayTransaction.java b/src/main/java/TransactionImplementation/PaydayTransaction.java
similarity index 86%
rename from src/main/java/GeneralTransactions/PaydayTransaction.java
rename to src/main/java/TransactionImplementation/PaydayTransaction.java
index 227e5d9..1cf32dd 100644
--- a/src/main/java/GeneralTransactions/PaydayTransaction.java
+++ b/src/main/java/TransactionImplementation/PaydayTransaction.java
@@ -1,11 +1,10 @@
-package GeneralTransactions;
+package TransactionImplementation;

 import java.util.Calendar;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;

-import Affiliations.PaycheckImplementation;
 import PayrollDatabase.GlobalDatabase;
 import PayrollDomain.Employee;
 import PayrollDomain.Paycheck;
@@ -30,7 +29,7 @@ public class PaydayTransaction implements Transaction {
         for(int empId : empIds) {
             Employee e = GlobalDatabase.payrollDB.GetEmployee(empId);
             if(e.IsPayDate(itsPayDate)) {
-                Paycheck pc = new PaycheckImplementation(e.GetPayPeriodStartDate(itsPayDate),itsPayDate);
+                Paycheck pc = itsPayrollFactory.makePaycheck(e.GetPayPeriodStartDate(itsPayDate),itsPayDate);
                 itsPaychecks.put(empId, pc);
                 e.Payday(pc);
             }
diff --git a/src/main/java/ClassificationTransactions/SalesReceiptTransaction.java b/src/main/java/TransactionImplementation/SalesReceiptTransaction.java
similarity index 92%
rename from src/main/java/ClassificationTransactions/SalesReceiptTransaction.java
rename to src/main/java/TransactionImplementation/SalesReceiptTransaction.java
index e04aada..256c8da 100644
--- a/src/main/java/ClassificationTransactions/SalesReceiptTransaction.java
+++ b/src/main/java/TransactionImplementation/SalesReceiptTransaction.java
@@ -1,8 +1,8 @@
-package ClassificationTransactions;
+package TransactionImplementation;

 import java.util.Calendar;

-import Classifications.CommissionedClassification;
+import PayrollImplementation.CommissionedClassification;
 import PayrollDatabase.GlobalDatabase;
 import PayrollDomain.Employee;
 import PayrollDomain.PaymentClassification;
diff --git a/src/main/java/AffiliationTransactions/ServiceChargeTransaction.java b/src/main/java/TransactionImplementation/ServiceChargeTransaction.java
similarity index 91%
rename from src/main/java/AffiliationTransactions/ServiceChargeTransaction.java
rename to src/main/java/TransactionImplementation/ServiceChargeTransaction.java
index e436a7c..5621d28 100644
--- a/src/main/java/AffiliationTransactions/ServiceChargeTransaction.java
+++ b/src/main/java/TransactionImplementation/ServiceChargeTransaction.java
@@ -1,6 +1,6 @@
-package AffiliationTransactions;
+package TransactionImplementation;

-import Affiliations.UnionAffiliation;
+import PayrollImplementation.UnionAffiliation;
 import PayrollDatabase.GlobalDatabase;
 import PayrollDomain.Affiliation;
 import PayrollDomain.Employee;
diff --git a/src/main/java/ClassificationTransactions/TimeCardTransaction.java b/src/main/java/TransactionImplementation/TimeCardTransaction.java
similarity index 92%
rename from src/main/java/ClassificationTransactions/TimeCardTransaction.java
rename to src/main/java/TransactionImplementation/TimeCardTransaction.java
index b591366..8b6c1e3 100644
--- a/src/main/java/ClassificationTransactions/TimeCardTransaction.java
+++ b/src/main/java/TransactionImplementation/TimeCardTransaction.java
@@ -1,8 +1,8 @@
-package ClassificationTransactions;
+package TransactionImplementation;

 import java.util.Calendar;

-import Classifications.HourlyClassification;
+import PayrollImplementation.HourlyClassification;
 import PayrollDatabase.GlobalDatabase;
 import PayrollDomain.Employee;
 import PayrollDomain.PaymentClassification;
diff --git a/src/main/java/TransactionImplementation/TransactionFactoryImplementation.java b/src/main/java/TransactionImplementation/TransactionFactoryImplementation.java
index 3e32596..ff6aea8 100644
--- a/src/main/java/TransactionImplementation/TransactionFactoryImplementation.java
+++ b/src/main/java/TransactionImplementation/TransactionFactoryImplementation.java
@@ -2,14 +2,6 @@ package TransactionImplementation;

 import java.util.Calendar;

-import AffiliationTransactions.ChangeMemberTransaction;
-import AffiliationTransactions.ChangeUnaffiliatedTransaction;
-import AffiliationTransactions.ServiceChargeTransaction;
-import ClassificationTransactions.*;
-import GeneralTransactions.*;
-import MethodTransactions.ChangeDirectTransaction;
-import MethodTransactions.ChangeHoldTransaction;
-import MethodTransactions.ChangeMailTransaction;
 import PayrollFactory.PayrollFactory;
 import TransactionApplication.Transaction;
 import TransactionFactory.TransactionFactory;
diff --git a/src/test/java/Main.java b/src/test/java/Main.java
index e839b85..e9c1715 100644
--- a/src/test/java/Main.java
+++ b/src/test/java/Main.java
@@ -2,8 +2,8 @@ import java.util.Calendar;
 import java.util.GregorianCalendar;

 import Application.Application;
-import Classifications.HourlyClassification;
-import Classifications.TimeCard;
+import PayrollImplementation.HourlyClassification;
+import PayrollImplementation.TimeCard;
 import PayrollApplication.PayrollApplication;
 import PayrollDatabase.GlobalDatabase;
 import PayrollDatabaseImplementation.PayrollDatabaseImplementation;
diff --git a/src/test/java/TestPayroll.java b/src/test/java/TestPayroll.java
index f94dedf..716b420 100644
--- a/src/test/java/TestPayroll.java
+++ b/src/test/java/TestPayroll.java
@@ -1,20 +1,12 @@
-import PayrollImplementation.PayrollFactoryImplementation;
-import TransactionImplementation.TransactionFactoryImplementation;
+import PayrollImplementation.*;
+import TransactionImplementation.*;
 import junit.framework.TestCase;

 import java.util.Calendar;
 import java.util.GregorianCalendar;

-import AffiliationTransactions.*;
-import Affiliations.*;
-import ClassificationTransactions.*;
-import Classifications.*;
-import GeneralTransactions.*;
-import MethodTransactions.*;
-import Methods.*;
 import PayrollDatabase.*;
 import PayrollDomain.*;
-import Schedules.*;
 import PayrollFactory.PayrollFactory;
 import PayrollDatabaseImplementation.PayrollDatabaseImplementation;

コミット: 9b4e590

メッセージ

Payrollパッケージ2

変更されたファイル

  • M src/main/java/AffiliationTransactions/ChangeMemberTransaction.java
  • M src/main/java/AffiliationTransactions/ChangeUnaffiliatedTransaction.java
  • M src/main/java/ClassificationTransactions/ChangeCommissionedTransaction.java
  • M src/main/java/ClassificationTransactions/ChangeHourlyTransaction.java
  • M src/main/java/ClassificationTransactions/ChangeSalariedTransaction.java
  • M src/main/java/GeneralTransactions/AddCommissionedEmployee.java
  • M src/main/java/GeneralTransactions/AddEmployeeTransaction.java
  • M src/main/java/GeneralTransactions/AddHourlyEmployee.java
  • M src/main/java/GeneralTransactions/AddSalariedEmployee.java
  • M src/main/java/GeneralTransactions/PaydayTransaction.java
  • M src/main/java/MethodTransactions/ChangeDirectTransaction.java
  • M src/main/java/MethodTransactions/ChangeHoldTransaction.java
  • M src/main/java/MethodTransactions/ChangeMailTransaction.java
  • M src/main/java/PayrollApplication/PayrollApplication.java
  • A src/main/java/PayrollFactory/PayrollFactory.java
  • A src/main/java/PayrollImplementation/PayrollFactoryImplementation.java
  • M src/main/java/TextParserTransactionSource/TextParserTransactionSource.java
  • A src/main/java/TransactionFactory/TransactionFactory.java
  • A src/main/java/TransactionImplementation/TransactionFactoryImplementation.java
  • M src/test/java/TestPayroll.java

変更内容

commit 9b4e590ca4ee7476edd008feede95bd202a6f5a3
Author: k2works <kakimomokuri@gmail.com>
Date:   Tue Apr 11 14:26:51 2017 +0900

    Payrollパッケージ2

diff --git a/src/main/java/AffiliationTransactions/ChangeMemberTransaction.java b/src/main/java/AffiliationTransactions/ChangeMemberTransaction.java
index 07e1a5b..26068be 100644
--- a/src/main/java/AffiliationTransactions/ChangeMemberTransaction.java
+++ b/src/main/java/AffiliationTransactions/ChangeMemberTransaction.java
@@ -4,6 +4,7 @@ import Affiliations.UnionAffiliation;
 import PayrollDatabase.GlobalDatabase;
 import PayrollDomain.Affiliation;
 import PayrollDomain.Employee;
+import PayrollFactory.PayrollFactory;

 /**
  * Created by k2works on 2017/04/07.
@@ -11,11 +12,13 @@ import PayrollDomain.Employee;
 public class ChangeMemberTransaction extends ChangeAffiliationTransaction {
     private int itsMemberId;
     private double itsDues;
+    private PayrollFactory itsPayrollFactory;

-    public ChangeMemberTransaction(int empId, int memberId, double dues) {
+    public ChangeMemberTransaction(int empId, int memberId, double dues, PayrollFactory payrollFactory) {
         super(empId);
         itsMemberId = memberId;
         itsDues = dues;
+        itsPayrollFactory = payrollFactory;
     }

     public Affiliation GetAffiliation() {
diff --git a/src/main/java/AffiliationTransactions/ChangeUnaffiliatedTransaction.java b/src/main/java/AffiliationTransactions/ChangeUnaffiliatedTransaction.java
index 926e4bd..1714cde 100644
--- a/src/main/java/AffiliationTransactions/ChangeUnaffiliatedTransaction.java
+++ b/src/main/java/AffiliationTransactions/ChangeUnaffiliatedTransaction.java
@@ -5,13 +5,17 @@ import PayrollDatabase.GlobalDatabase;
 import PayrollDomain.Affiliation;
 import PayrollDomain.Employee;
 import PayrollDomain.NoAffiliation;
+import PayrollFactory.PayrollFactory;

 /**
  * Created by k2works on 2017/04/07.
  */
 public class ChangeUnaffiliatedTransaction extends ChangeAffiliationTransaction {
-    public ChangeUnaffiliatedTransaction(int empId) {
+    private PayrollFactory itsPayrollFactory;
+
+    public ChangeUnaffiliatedTransaction(int empId, PayrollFactory payrollFactory) {
         super(empId);
+        itsPayrollFactory = payrollFactory;
     }

     public Affiliation GetAffiliation() {
diff --git a/src/main/java/ClassificationTransactions/ChangeCommissionedTransaction.java b/src/main/java/ClassificationTransactions/ChangeCommissionedTransaction.java
index f2bc752..3171d8f 100644
--- a/src/main/java/ClassificationTransactions/ChangeCommissionedTransaction.java
+++ b/src/main/java/ClassificationTransactions/ChangeCommissionedTransaction.java
@@ -3,6 +3,7 @@ package ClassificationTransactions;
 import Classifications.CommissionedClassification;
 import PayrollDomain.PaymentClassification;
 import PayrollDomain.PaymentSchedule;
+import PayrollFactory.PayrollFactory;
 import Schedules.BiweeklySchedule;

 /**
@@ -11,11 +12,13 @@ import Schedules.BiweeklySchedule;
 public class ChangeCommissionedTransaction extends ChangeClassificationTransaction {
     private double itsSalary;
     private double itsHourlyRate;
+    private PayrollFactory itsPayrollFactory;

-    public ChangeCommissionedTransaction(int empId, double salary, double hourlyRate) {
+    public ChangeCommissionedTransaction(int empId, double salary, double hourlyRate, PayrollFactory payrollFactory) {
         super(empId);
         itsSalary = salary;
         itsHourlyRate = hourlyRate;
+        itsPayrollFactory = payrollFactory;
     }

     PaymentSchedule GetSchedule() {
diff --git a/src/main/java/ClassificationTransactions/ChangeHourlyTransaction.java b/src/main/java/ClassificationTransactions/ChangeHourlyTransaction.java
index 4843576..8b385f1 100644
--- a/src/main/java/ClassificationTransactions/ChangeHourlyTransaction.java
+++ b/src/main/java/ClassificationTransactions/ChangeHourlyTransaction.java
@@ -4,16 +4,19 @@ import Classifications.HourlyClassification;
 import PayrollDomain.PaymentClassification;
 import PayrollDomain.PaymentSchedule;
 import Schedules.WeeklySchedule;
+import PayrollFactory.PayrollFactory;

 /**
  * Created by k2works on 2017/04/07.
  */
 public class ChangeHourlyTransaction extends ChangeClassificationTransaction {
     private double itsRate;
+    private PayrollFactory itsPayrollFactory;

-    public ChangeHourlyTransaction(int empId, double rate) {
+    public ChangeHourlyTransaction(int empId, double rate, PayrollFactory payrollFactory) {
         super(empId);
         itsRate = rate;
+        itsPayrollFactory = payrollFactory;
     }

     PaymentSchedule GetSchedule() {
diff --git a/src/main/java/ClassificationTransactions/ChangeSalariedTransaction.java b/src/main/java/ClassificationTransactions/ChangeSalariedTransaction.java
index 77d6cb6..c9564ed 100644
--- a/src/main/java/ClassificationTransactions/ChangeSalariedTransaction.java
+++ b/src/main/java/ClassificationTransactions/ChangeSalariedTransaction.java
@@ -4,16 +4,19 @@ import Classifications.SalariedClassification;
 import PayrollDomain.PaymentClassification;
 import PayrollDomain.PaymentSchedule;
 import Schedules.MonthlySchedule;
+import PayrollFactory.PayrollFactory;

 /**
  * Created by k2works on 2017/04/07.
  */
 public class ChangeSalariedTransaction extends ChangeClassificationTransaction {
     private double itsSalary;
+    private PayrollFactory itsPayrollFactory;

-    public ChangeSalariedTransaction(int empId, double salary) {
+    public ChangeSalariedTransaction(int empId, double salary, PayrollFactory payrollFactory) {
         super(empId);
         itsSalary = salary;
+        itsPayrollFactory = payrollFactory;
     }

     PaymentSchedule GetSchedule() {
diff --git a/src/main/java/GeneralTransactions/AddCommissionedEmployee.java b/src/main/java/GeneralTransactions/AddCommissionedEmployee.java
index 47716e5..c905f1b 100644
--- a/src/main/java/GeneralTransactions/AddCommissionedEmployee.java
+++ b/src/main/java/GeneralTransactions/AddCommissionedEmployee.java
@@ -3,6 +3,7 @@ package GeneralTransactions;
 import Classifications.CommissionedClassification;
 import PayrollDomain.PaymentClassification;
 import PayrollDomain.PaymentSchedule;
+import PayrollFactory.PayrollFactory;
 import Schedules.BiweeklySchedule;

 /**
@@ -12,8 +13,8 @@ public class AddCommissionedEmployee extends AddEmployeeTransaction {
     private double itsSalary;
     private double itsCommissionRate;

-    public AddCommissionedEmployee(int empId, String name, String address, double salary, double commissionRate) {
-        super(empId, name, address);
+    public AddCommissionedEmployee(int empId, String name, String address, double salary, double commissionRate, PayrollFactory payrollFactory) {
+        super(empId, name, address, payrollFactory);
         itsSalary = salary;
         itsCommissionRate = commissionRate;
     }
diff --git a/src/main/java/GeneralTransactions/AddEmployeeTransaction.java b/src/main/java/GeneralTransactions/AddEmployeeTransaction.java
index f595bdf..dbaaf83 100644
--- a/src/main/java/GeneralTransactions/AddEmployeeTransaction.java
+++ b/src/main/java/GeneralTransactions/AddEmployeeTransaction.java
@@ -6,6 +6,7 @@ import PayrollDomain.Employee;
 import PayrollDomain.PaymentClassification;
 import PayrollDomain.PaymentMethod;
 import PayrollDomain.PaymentSchedule;
+import PayrollFactory.PayrollFactory;
 import TransactionApplication.Transaction;

 /**
@@ -15,11 +16,13 @@ public abstract class AddEmployeeTransaction implements Transaction {
     private int itsEmpId;
     private String itsName;
     private String itsAddress;
+    protected PayrollFactory itsPayrollFactory;

-    public AddEmployeeTransaction(int empId, String name, String address) {
+    public AddEmployeeTransaction(int empId, String name, String address, PayrollFactory payrollFactory) {
         itsEmpId = empId;
         itsName = name;
         itsAddress = address;
+        itsPayrollFactory = payrollFactory;
     }

     public void Execute() {
diff --git a/src/main/java/GeneralTransactions/AddHourlyEmployee.java b/src/main/java/GeneralTransactions/AddHourlyEmployee.java
index 134c52e..2c85ab4 100644
--- a/src/main/java/GeneralTransactions/AddHourlyEmployee.java
+++ b/src/main/java/GeneralTransactions/AddHourlyEmployee.java
@@ -3,6 +3,7 @@ package GeneralTransactions;
 import Classifications.HourlyClassification;
 import PayrollDomain.PaymentClassification;
 import PayrollDomain.PaymentSchedule;
+import PayrollFactory.PayrollFactory;
 import Schedules.WeeklySchedule;

 /**
@@ -11,8 +12,8 @@ import Schedules.WeeklySchedule;
 public class AddHourlyEmployee extends AddEmployeeTransaction {
     private double itsHourlyRate;

-    public AddHourlyEmployee(int empId, String name, String address, double hourlyRate) {
-        super(empId, name, address);
+    public AddHourlyEmployee(int empId, String name, String address, double hourlyRate, PayrollFactory payrollFactory) {
+        super(empId, name, address, payrollFactory);
         itsHourlyRate = hourlyRate;
     }

diff --git a/src/main/java/GeneralTransactions/AddSalariedEmployee.java b/src/main/java/GeneralTransactions/AddSalariedEmployee.java
index 079c6e2..f7e182a 100644
--- a/src/main/java/GeneralTransactions/AddSalariedEmployee.java
+++ b/src/main/java/GeneralTransactions/AddSalariedEmployee.java
@@ -3,6 +3,7 @@ package GeneralTransactions;
 import Classifications.SalariedClassification;
 import PayrollDomain.PaymentClassification;
 import PayrollDomain.PaymentSchedule;
+import PayrollFactory.PayrollFactory;
 import Schedules.MonthlySchedule;

 /**
@@ -11,8 +12,8 @@ import Schedules.MonthlySchedule;
 public class AddSalariedEmployee extends AddEmployeeTransaction {
     private double itsSalary;

-    public AddSalariedEmployee(int empId, String name, String address, double salary) {
-        super(empId, name, address);
+    public AddSalariedEmployee(int empId, String name, String address, double salary, PayrollFactory payrollFactory) {
+        super(empId, name, address, payrollFactory);
         itsSalary = salary;
     }

diff --git a/src/main/java/GeneralTransactions/PaydayTransaction.java b/src/main/java/GeneralTransactions/PaydayTransaction.java
index 22d506e..227e5d9 100644
--- a/src/main/java/GeneralTransactions/PaydayTransaction.java
+++ b/src/main/java/GeneralTransactions/PaydayTransaction.java
@@ -10,6 +10,7 @@ import PayrollDatabase.GlobalDatabase;
 import PayrollDomain.Employee;
 import PayrollDomain.Paycheck;
 import TransactionApplication.Transaction;
+import PayrollFactory.PayrollFactory;

 /**
  * Created by k2works on 2017/04/07.
@@ -17,9 +18,11 @@ import TransactionApplication.Transaction;
 public class PaydayTransaction implements Transaction {
     private Calendar itsPayDate;
     private Map<Integer, Paycheck> itsPaychecks = new HashMap<Integer, Paycheck>();
+    private PayrollFactory itsPayrollFactory;

-    public PaydayTransaction(Calendar payDate) {
+    public PaydayTransaction(Calendar payDate, PayrollFactory payrollFactory) {
         itsPayDate = payDate;
+        itsPayrollFactory = payrollFactory;
     }

     public void Execute() {
diff --git a/src/main/java/MethodTransactions/ChangeDirectTransaction.java b/src/main/java/MethodTransactions/ChangeDirectTransaction.java
index c30a8b5..9325dee 100644
--- a/src/main/java/MethodTransactions/ChangeDirectTransaction.java
+++ b/src/main/java/MethodTransactions/ChangeDirectTransaction.java
@@ -2,6 +2,7 @@ package MethodTransactions;

 import Methods.DirectMethod;
 import PayrollDomain.PaymentMethod;
+import PayrollFactory.PayrollFactory;

 /**
  * Created by k2works on 2017/04/07.
@@ -9,11 +10,13 @@ import PayrollDomain.PaymentMethod;
 public class ChangeDirectTransaction extends ChangeMethodTransaction {
     private String itsBank;
     private String itsAccount;
+    private PayrollFactory itsPayrollFactory;

-    public ChangeDirectTransaction(int empId, String bank, String account) {
+    public ChangeDirectTransaction(int empId, String bank, String account, PayrollFactory payrollFactory) {
         super(empId);
         itsBank = bank;
         itsAccount = account;
+        itsPayrollFactory = payrollFactory;
     }

     PaymentMethod GetMethod() {
diff --git a/src/main/java/MethodTransactions/ChangeHoldTransaction.java b/src/main/java/MethodTransactions/ChangeHoldTransaction.java
index c4d615a..68b4e0b 100644
--- a/src/main/java/MethodTransactions/ChangeHoldTransaction.java
+++ b/src/main/java/MethodTransactions/ChangeHoldTransaction.java
@@ -2,12 +2,15 @@ package MethodTransactions;

 import Methods.HoldMethod;
 import PayrollDomain.PaymentMethod;
+import PayrollFactory.PayrollFactory;

 /**
  * Created by k2works on 2017/04/07.
  */
 public class ChangeHoldTransaction extends ChangeMethodTransaction {
-    public ChangeHoldTransaction(int empId) {
+    private PayrollFactory itsPayrollFactory;
+
+    public ChangeHoldTransaction(int empId, PayrollFactory payrollFactory) {
         super(empId);
     }

diff --git a/src/main/java/MethodTransactions/ChangeMailTransaction.java b/src/main/java/MethodTransactions/ChangeMailTransaction.java
index 343b48e..0dd5949 100644
--- a/src/main/java/MethodTransactions/ChangeMailTransaction.java
+++ b/src/main/java/MethodTransactions/ChangeMailTransaction.java
@@ -2,16 +2,19 @@ package MethodTransactions;

 import Methods.MailMethod;
 import PayrollDomain.PaymentMethod;
+import PayrollFactory.PayrollFactory;

 /**
  * Created by k2works on 2017/04/07.
  */
 public class ChangeMailTransaction extends ChangeMethodTransaction {
     private String itsAddress;
+    private PayrollFactory itsPayrollFactory;

-    public ChangeMailTransaction(int empId, String address) {
+    public ChangeMailTransaction(int empId, String address, PayrollFactory payrollFactory) {
         super(empId);
         itsAddress = address;
+        itsPayrollFactory = payrollFactory;
     }

     PaymentMethod GetMethod() {
diff --git a/src/main/java/PayrollApplication/PayrollApplication.java b/src/main/java/PayrollApplication/PayrollApplication.java
index 0a2f1a6..08ceade 100644
--- a/src/main/java/PayrollApplication/PayrollApplication.java
+++ b/src/main/java/PayrollApplication/PayrollApplication.java
@@ -1,8 +1,12 @@
 package PayrollApplication;

+import PayrollFactory.PayrollFactory;
+import PayrollImplementation.PayrollFactoryImplementation;
 import TextParserTransactionSource.TextParserTransactionSource;
 import TransactionApplication.TransactionApplication;
 import TransactionApplication.TransactionSource;
+import TransactionFactory.TransactionFactory;
+import TransactionImplementation.TransactionFactoryImplementation;

 /**
  * Created by k2works on 2017/04/10.
@@ -11,7 +15,9 @@ public class PayrollApplication extends TransactionApplication {
     private TransactionSource transactionSource;

     public PayrollApplication() {
-        transactionSource = new TextParserTransactionSource();
+        PayrollFactory payrollFactory = new PayrollFactoryImplementation();
+        TransactionFactory transactionFactory = new TransactionFactoryImplementation(payrollFactory);
+        transactionSource = new TextParserTransactionSource(transactionFactory);
     }

     public void SetSource(String source) {
diff --git a/src/main/java/PayrollFactory/PayrollFactory.java b/src/main/java/PayrollFactory/PayrollFactory.java
new file mode 100644
index 0000000..3d98c35
--- /dev/null
+++ b/src/main/java/PayrollFactory/PayrollFactory.java
@@ -0,0 +1,42 @@
+package PayrollFactory;
+
+import java.util.Calendar;
+
+import PayrollDomain.Affiliation;
+import PayrollDomain.Employee;
+import PayrollDomain.Paycheck;
+import PayrollDomain.PaymentClassification;
+import PayrollDomain.PaymentMethod;
+import PayrollDomain.PaymentSchedule;
+
+/**
+ * Created by k2works on 2017/04/10.
+ */
+public interface PayrollFactory {
+    public PaymentSchedule makeBiweeklySchedule();
+
+    public PaymentClassification makeCommissionedClassification(double salary, double commissionRate);
+
+    public PaymentMethod makeDirectMethod(String bank, String account);
+
+    public PaymentMethod makeHoldMethod();
+
+    public PaymentClassification makeHourlyClassification(double hourlyRate);
+
+    public PaymentMethod makeMailMethod(String address);
+
+    public PaymentSchedule makeMonthlySchedule();
+
+    public PaymentClassification makeSalariedClassification(double salary);
+
+    public Affiliation makeUnionAffiliation(int memberId, double dues);
+
+    public PaymentSchedule makeWeeklySchedule();
+
+    public Affiliation makeNoAffiliation();
+
+    public Employee makeEmployee(int empId, String name, String address);
+
+    public Paycheck makePaycheck(Calendar getPayPeriodStartDate, Calendar payDate);
+}
+
diff --git a/src/main/java/PayrollImplementation/PayrollFactoryImplementation.java b/src/main/java/PayrollImplementation/PayrollFactoryImplementation.java
new file mode 100644
index 0000000..200f00a
--- /dev/null
+++ b/src/main/java/PayrollImplementation/PayrollFactoryImplementation.java
@@ -0,0 +1,85 @@
+package PayrollImplementation;
+
+import java.util.Calendar;
+
+import Affiliations.PaycheckImplementation;
+import Affiliations.UnionAffiliation;
+import Classifications.CommissionedClassification;
+import Classifications.HourlyClassification;
+import Classifications.SalariedClassification;
+import Classifications.SalesReceipt;
+import Methods.DirectMethod;
+import Methods.HoldMethod;
+import Methods.MailMethod;
+import PayrollDomain.Affiliation;
+import PayrollDomain.Employee;
+import PayrollDomain.NoAffiliation;
+import PayrollDomain.Paycheck;
+import PayrollDomain.PaymentClassification;
+import PayrollDomain.PaymentMethod;
+import PayrollDomain.PaymentSchedule;
+import PayrollFactory.PayrollFactory;
+import Schedules.BiweeklySchedule;
+import Schedules.MonthlySchedule;
+import Schedules.WeeklySchedule;
+
+/**
+ * Created by k2works on 2017/04/10.
+ */
+public class PayrollFactoryImplementation implements PayrollFactory {
+    public PaymentSchedule makeBiweeklySchedule() {
+        return new BiweeklySchedule();
+    }
+
+    public PaymentClassification makeCommissionedClassification(double salary, double commissionRate) {
+        return new CommissionedClassification(salary, commissionRate);
+    }
+
+    public PaymentMethod makeDirectMethod(String bank, String account) {
+        return new DirectMethod(bank, account);
+    }
+
+    public PaymentMethod makeHoldMethod() {
+        return new HoldMethod();
+    }
+
+    public PaymentClassification makeHourlyClassification(double hourlyRate) {
+        return new HourlyClassification(hourlyRate);
+    }
+
+    public PaymentMethod makeMailMethod(String address) {
+        return new MailMethod(address);
+    }
+
+    public PaymentSchedule makeMonthlySchedule() {
+        return new MonthlySchedule();
+    }
+
+    public PaymentClassification makeSalariedClassification(double salary) {
+        return new SalariedClassification(salary);
+    }
+
+    public SalesReceipt makeSalesReceipt(Calendar saleDate, double amount) {
+        return new SalesReceipt(saleDate, amount);
+    }
+
+    public Affiliation makeUnionAffiliation(int memberId, double dues) {
+        return new UnionAffiliation(memberId, dues);
+    }
+
+    public PaymentSchedule makeWeeklySchedule() {
+        return new WeeklySchedule();
+    }
+
+    public Affiliation makeNoAffiliation() {
+        return new NoAffiliation();
+    }
+
+    public Employee makeEmployee(int empId, String name, String address) {
+        return new Employee(empId, name, address);
+    }
+
+    public Paycheck makePaycheck(Calendar payPeriodStartDate, Calendar payDate) {
+        return new PaycheckImplementation(payPeriodStartDate, payDate);
+    }
+}
diff --git a/src/main/java/TextParserTransactionSource/TextParserTransactionSource.java b/src/main/java/TextParserTransactionSource/TextParserTransactionSource.java
index dcf923c..dc470c4 100644
--- a/src/main/java/TextParserTransactionSource/TextParserTransactionSource.java
+++ b/src/main/java/TextParserTransactionSource/TextParserTransactionSource.java
@@ -10,32 +10,20 @@ import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.List;

-import AffiliationTransactions.ChangeMemberTransaction;
-import AffiliationTransactions.ChangeUnaffiliatedTransaction;
-import AffiliationTransactions.ServiceChargeTransaction;
-import ClassificationTransactions.ChangeCommissionedTransaction;
-import ClassificationTransactions.ChangeHourlyTransaction;
-import ClassificationTransactions.ChangeSalariedTransaction;
-import ClassificationTransactions.SalesReceiptTransaction;
-import ClassificationTransactions.TimeCardTransaction;
-import GeneralTransactions.AddCommissionedEmployee;
-import GeneralTransactions.AddHourlyEmployee;
-import GeneralTransactions.AddSalariedEmployee;
-import GeneralTransactions.ChangeAddressTransaction;
-import GeneralTransactions.ChangeNameTransaction;
-import GeneralTransactions.DeleteEmployeeTransaction;
-import GeneralTransactions.PaydayTransaction;
-import MethodTransactions.ChangeDirectTransaction;
-import MethodTransactions.ChangeHoldTransaction;
-import MethodTransactions.ChangeMailTransaction;
 import TransactionApplication.Transaction;
 import TransactionApplication.TransactionSource;
+import TransactionFactory.TransactionFactory;

 /**
  * Created by k2works on 2017/04/10.
  */
 public class TextParserTransactionSource extends TransactionSource {
     public String itsSource;
+    public TransactionFactory itsTransactionFactory;
+
+    public TextParserTransactionSource(TransactionFactory transactionFactory) {
+        itsTransactionFactory = transactionFactory;
+    }

     public void Execute() {
         parse();
@@ -54,29 +42,29 @@ public class TextParserTransactionSource extends TransactionSource {
             t = ChgEmp(line);
         } else if (transactionName.equals("DelEmp")) {
             int empId = Integer.parseInt(line.get(1));
-            t = new DeleteEmployeeTransaction(empId);
-        } else if (transactionName.equals("Affiliations.ServiceCharge")) {
+            t = itsTransactionFactory.makeDeleteEmployeeTransaction(empId);
+        } else if (transactionName.equals("ServiceCharge")) {
             int memberId = Integer.parseInt(line.get(1));
             Calendar date = Calendar.getInstance();
             date.setTime(new SimpleDateFormat("yyyy/MM/dd").parse(line.get(2)));
             double amount = Double.parseDouble(line.get(2));
-            t = new ServiceChargeTransaction(memberId, date, amount);
+            t = itsTransactionFactory.makeServiceChargeTransaction(memberId, date, amount);
         }  else if (transactionName.equals("SalesReceipt")) {
             int empId = Integer.parseInt(line.get(1));
             Calendar date = Calendar.getInstance();
             date.setTime(new SimpleDateFormat("yyyy/MM/dd").parse(line.get(2)));
             double amount = Double.parseDouble(line.get(3));
-            t = new SalesReceiptTransaction(date, amount, empId);
+            t = itsTransactionFactory.makeSalesReceiptTransaction(date, amount, empId);
         } else if (transactionName.equals("TimeCard")) {
             int empId = Integer.parseInt(line.get(1));
             Calendar date = Calendar.getInstance();
             date.setTime(new SimpleDateFormat("yyyy/MM/dd").parse(line.get(2)));
             double hours = Double.parseDouble(line.get(3));
-            t = new TimeCardTransaction(date, hours, empId);
+            t = itsTransactionFactory.makeTimeCardTransaction(date, hours, empId);
         } else if (transactionName.equals("Payday")) {
             Calendar payDate = Calendar.getInstance();
             payDate.setTime(new SimpleDateFormat("yyyy/MM/dd").parse(line.get(1)));
-            t = new PaydayTransaction(payDate);
+            t = itsTransactionFactory.makePaydayTransaction(payDate);
         }
         if (t != null) {
             t.Execute();
@@ -139,14 +127,14 @@ public class TextParserTransactionSource extends TransactionSource {
         int empId = Integer.parseInt(line.get(1));
         if (line.get(4).equals("H")) {
             double hourlyRate = Double.parseDouble(line.get(5));
-            t = new AddHourlyEmployee(empId, line.get(2),  line.get(3), hourlyRate);
+            t = itsTransactionFactory.makeAddHourlyEmployee(empId, line.get(2),  line.get(3), hourlyRate);
         } else if (line.get(4).equals("S")) {
             double salary = Double.parseDouble(line.get(5));
-            t = new AddSalariedEmployee(empId, line.get(2), line.get(3), salary);
+            t = itsTransactionFactory.makeAddSalariedEmployee(empId, line.get(2), line.get(3), salary);
         } else if (line.get(4).equals("C")) {
             double salary = Double.parseDouble(line.get(5));
             double commissionRate = Double.parseDouble(line.get(6));
-            t = new AddCommissionedEmployee(empId, line.get(2), line.get(3), salary, commissionRate);
+            t = itsTransactionFactory.makeAddCommissionedEmployee(empId, line.get(2), line.get(3), salary, commissionRate);
         }
         return t;
     }
@@ -157,36 +145,36 @@ public class TextParserTransactionSource extends TransactionSource {
         String changeInfo = line.get(2);
         if (changeInfo.equals("Name")) {
             String name = line.get(3);
-            t = new ChangeNameTransaction(empId, name);
+            t = itsTransactionFactory.makeChangeNameTransaction(empId, name);
         } else if (changeInfo.equals("Address")) {
             String address = line.get(3);
-            t = new ChangeAddressTransaction(empId, address);
+            t = itsTransactionFactory.makeChangeAddressTransaction(empId, address);
         } else if (changeInfo.equals("Hourly")) {
             double hourly = Double.parseDouble(line.get(3));
-            t = new ChangeHourlyTransaction(empId, hourly);
+            t = itsTransactionFactory.makeChangeHourlyTransaction(empId, hourly);
         } else if (changeInfo.equals("Salaried")) {
             double salary = Double.parseDouble(line.get(3));
-            t = new ChangeSalariedTransaction(empId, salary);
+            t = itsTransactionFactory.makeChangeSalariedTransaction(empId, salary);
         } else if (changeInfo.equals("Commissioned")) {
             double salary = Double.parseDouble(line.get(3));
             double rate = Double.parseDouble(line.get(4));
-            t = new ChangeCommissionedTransaction(empId, salary, rate);
+            t = itsTransactionFactory.makeChangeCommissionedTransaction(empId, salary, rate);
         } else if (changeInfo.equals("Hold")) {
-            t = new ChangeHoldTransaction(empId);
+            t = itsTransactionFactory.makeChangeHoldTransaction(empId);
         } else if (changeInfo.equals("Direct")) {
             String bank = line.get(3);
             String account = line.get(4);
-            t = new ChangeDirectTransaction(empId, bank, account);
+            t = itsTransactionFactory.makeChangeDirectTransaction(empId, bank, account);
         } else if (changeInfo.equals("Mail")) {
             String address = line.get(3);
-            t = new ChangeMailTransaction(0, address);
+            t = itsTransactionFactory.makeChangeMailTransaction(0, address);
         } else if (changeInfo.equals("Member")) {
             int memberId = Integer.parseInt(line.get(3));
             double dues = Double.parseDouble(line.get(5));
-            t = new ChangeMemberTransaction(empId, memberId, dues);
+            t = itsTransactionFactory.makeChangeMemberTransaction(empId, memberId, dues);
         } else if (changeInfo.equals("NoMember")) {
-            t = new ChangeUnaffiliatedTransaction(empId);
+            t = itsTransactionFactory.makeChangeUnaffiliatedTransaction(empId);
         }
         return t;
     }
-}
+}
\ No newline at end of file
diff --git a/src/main/java/TransactionFactory/TransactionFactory.java b/src/main/java/TransactionFactory/TransactionFactory.java
new file mode 100644
index 0000000..aa2ca31
--- /dev/null
+++ b/src/main/java/TransactionFactory/TransactionFactory.java
@@ -0,0 +1,48 @@
+package TransactionFactory;
+
+import java.util.Calendar;
+
+import TransactionApplication.Transaction;
+
+/**
+ * Created by k2works on 2017/04/10.
+ */
+public interface TransactionFactory {
+    public Transaction makeAddCommissionedEmployee(int empId, String name, String address,
+                                                   double salary, double commissionRate);
+
+    public Transaction makeAddHourlyEmployee(int empId, String name, String address,
+                                             double hourlyRate);
+
+    public Transaction makeAddSalariedEmployee(int empId, String name, String address, double salary);
+
+    public Transaction makeChangeAddressTransaction(int empId, String address);
+
+    public Transaction makeChangeCommissionedTransaction(int empId, double salary, double hourlyRate);
+
+    public Transaction makeChangeDirectTransaction(int empId, String bank, String account);
+
+    public Transaction makeChangeHoldTransaction(int empId);
+
+    public Transaction makeChangeHourlyTransaction(int empId, double rate);
+
+    public Transaction makeChangeMailTransaction(int empId, String address);
+
+    public Transaction makeChangeMemberTransaction(int empId, int memberId, double dues);
+
+    public Transaction makeChangeNameTransaction(int empId, String name);
+
+    public Transaction makeChangeSalariedTransaction(int empId, double salary);
+
+    public Transaction makeChangeUnaffiliatedTransaction(int empId);
+
+    public Transaction makeDeleteEmployeeTransaction(int empId);
+
+    public Transaction makePaydayTransaction(Calendar payDate);
+
+    public Transaction makeSalesReceiptTransaction(Calendar saleDate, double amount, int empId);
+
+    public Transaction makeServiceChargeTransaction(int memberId, Calendar date, double amount);
+
+    public Transaction makeTimeCardTransaction(Calendar date, double hours, int empId);
+}
diff --git a/src/main/java/TransactionImplementation/TransactionFactoryImplementation.java b/src/main/java/TransactionImplementation/TransactionFactoryImplementation.java
new file mode 100644
index 0000000..3e32596
--- /dev/null
+++ b/src/main/java/TransactionImplementation/TransactionFactoryImplementation.java
@@ -0,0 +1,101 @@
+package TransactionImplementation;
+
+import java.util.Calendar;
+
+import AffiliationTransactions.ChangeMemberTransaction;
+import AffiliationTransactions.ChangeUnaffiliatedTransaction;
+import AffiliationTransactions.ServiceChargeTransaction;
+import ClassificationTransactions.*;
+import GeneralTransactions.*;
+import MethodTransactions.ChangeDirectTransaction;
+import MethodTransactions.ChangeHoldTransaction;
+import MethodTransactions.ChangeMailTransaction;
+import PayrollFactory.PayrollFactory;
+import TransactionApplication.Transaction;
+import TransactionFactory.TransactionFactory;
+
+/**
+ * Created by k2works on 2017/04/10.
+ */
+public class TransactionFactoryImplementation implements TransactionFactory {
+    private PayrollFactory itsPayrollFactory;
+
+    public TransactionFactoryImplementation(PayrollFactory payrollFactory) {
+        itsPayrollFactory = payrollFactory;
+    }
+
+    public Transaction makeAddCommissionedEmployee(int empId, String name, String address,
+                                                   double salary, double commissionRate) {
+        return new AddCommissionedEmployee(empId, name, address, salary, commissionRate, itsPayrollFactory);
+    }
+
+    public Transaction makeAddHourlyEmployee(int empId, String name, String address,
+                                             double hourlyRate) {
+        return new AddHourlyEmployee(empId, name, address, hourlyRate, itsPayrollFactory);
+    }
+
+    public Transaction makeAddSalariedEmployee(int empId, String name, String address, double salary) {
+        return new AddSalariedEmployee(empId, name, address, salary, itsPayrollFactory);
+    }
+
+    public Transaction makeChangeAddressTransaction(int empId, String address) {
+        return new ChangeAddressTransaction(empId, address);
+    }
+
+    public Transaction makeChangeCommissionedTransaction(int empId, double salary, double hourlyRate) {
+        return new ChangeCommissionedTransaction(empId, salary, hourlyRate, itsPayrollFactory);
+    }
+
+    public Transaction makeChangeDirectTransaction(int empId, String bank, String account) {
+        return new ChangeDirectTransaction(empId, bank, account, itsPayrollFactory);
+    }
+
+    public Transaction makeChangeHoldTransaction(int empId) {
+        return new ChangeHoldTransaction(empId, itsPayrollFactory);
+    }
+
+    public Transaction makeChangeHourlyTransaction(int empId, double rate) {
+        return new ChangeHourlyTransaction(empId, rate, itsPayrollFactory);
+    }
+
+    public Transaction makeChangeMailTransaction(int empId, String address) {
+        return new ChangeMailTransaction(empId, address, itsPayrollFactory);
+    }
+
+    public Transaction makeChangeMemberTransaction(int empId, int memberId, double dues) {
+        return new ChangeMemberTransaction(empId, memberId, dues, itsPayrollFactory);
+    }
+
+    public Transaction makeChangeNameTransaction(int empId, String name) {
+        return new ChangeNameTransaction(empId, name);
+    }
+
+    public Transaction makeChangeSalariedTransaction(int empId, double salary) {
+        return new ChangeSalariedTransaction(empId, salary, itsPayrollFactory);
+    }
+
+    public Transaction makeChangeUnaffiliatedTransaction(int empId) {
+        return new ChangeUnaffiliatedTransaction(empId, itsPayrollFactory);
+    }
+
+    public Transaction makeDeleteEmployeeTransaction(int empId) {
+        return new DeleteEmployeeTransaction(empId);
+    }
+
+    public Transaction makePaydayTransaction(Calendar payDate) {
+        return new PaydayTransaction(payDate, itsPayrollFactory);
+    }
+
+    public Transaction makeSalesReceiptTransaction(Calendar saleDate, double amount, int empId) {
+        return new SalesReceiptTransaction(saleDate, amount, empId);
+    }
+
+    public Transaction makeServiceChargeTransaction(int memberId, Calendar date, double amount) {
+        return new ServiceChargeTransaction(memberId, date, amount);
+    }
+
+    public Transaction makeTimeCardTransaction(Calendar date, double hours, int empId) {
+        return new TimeCardTransaction(date, hours, empId);
+    }
+}
+
diff --git a/src/test/java/TestPayroll.java b/src/test/java/TestPayroll.java
index 6cfc00f..f94dedf 100644
--- a/src/test/java/TestPayroll.java
+++ b/src/test/java/TestPayroll.java
@@ -1,3 +1,5 @@
+import PayrollImplementation.PayrollFactoryImplementation;
+import TransactionImplementation.TransactionFactoryImplementation;
 import junit.framework.TestCase;

 import java.util.Calendar;
@@ -11,19 +13,27 @@ import GeneralTransactions.*;
 import MethodTransactions.*;
 import Methods.*;
 import PayrollDatabase.*;
-import PayrollDatabaseImplementation.*;
 import PayrollDomain.*;
 import Schedules.*;
-
+import PayrollFactory.PayrollFactory;
+import PayrollDatabaseImplementation.PayrollDatabaseImplementation;

 /**
  * Created by k2works on 2017/04/06.
  */
 public class TestPayroll extends TestCase{
+    private static TransactionFactoryImplementation itsTransactionFactory;
+
+    public void setUp() {
+        GlobalDatabase.payrollDB = new PayrollDatabaseImplementation();
+        PayrollFactory payrollFactory = new PayrollFactoryImplementation();
+        itsTransactionFactory = new TransactionFactoryImplementation(payrollFactory);
+    }
+
     public void testAddSalariedEmployee() {
         System.err.println("TestAddSalariedEmployee");
         int empId = 1;
-        AddSalariedEmployee t = new AddSalariedEmployee(empId, "Bob", "Home", 1000.00);
+        AddSalariedEmployee t = makeSalariedEmployee(empId, 1000.00);
         t.Execute();
         Employee e = GlobalDatabase.payrollDB.GetEmployee(empId);
         assertNotNull(e);
@@ -43,7 +53,7 @@ public class TestPayroll extends TestCase{
     public void testAddHourlyEmployee() {
         System.err.println("TestAddHourlyEmployee");
         int empId = 2;
-        AddHourlyEmployee t = new AddHourlyEmployee(empId, "Bill", "Home", 15.25);
+        AddHourlyEmployee t = makeHourlyEmployee(empId);
         t.Execute();
         Employee e = GlobalDatabase.payrollDB.GetEmployee(empId);
         assertNotNull(e);
@@ -63,7 +73,7 @@ public class TestPayroll extends TestCase{
     public void testAddCommissionedEmployee() {
         System.err.println("TestAddCommissionedEmployee");
         int empId = 1;
-        AddCommissionedEmployee t = new AddCommissionedEmployee(empId, "Lance", "Home", 2500.0, 3.2);
+        AddCommissionedEmployee t = makeCommissionedEmployee(empId);
         t.Execute();
         Employee e = GlobalDatabase.payrollDB.GetEmployee(empId);
         assertNotNull(e);
@@ -84,7 +94,7 @@ public class TestPayroll extends TestCase{
     public void testDeleteEmployee() {
         System.err.println("TestDeleteEmployee");
         int empId = 3;
-        AddCommissionedEmployee t = new AddCommissionedEmployee(empId, "Lance","Home",2500,3.2);
+        AddCommissionedEmployee t = makeCommissionedEmployee(empId);
         t.Execute();
         Employee e = GlobalDatabase.payrollDB.GetEmployee(empId);
         assertNotNull(e);
@@ -97,7 +107,7 @@ public class TestPayroll extends TestCase{
     public void testTimeCardTransaction() {
         System.err.println("TestTimeCardTransaction");
         int empId = 2;
-        AddHourlyEmployee t = new AddHourlyEmployee(empId, "Bill", "Home", 15.25);
+        AddHourlyEmployee t = makeHourlyEmployee(empId);
         t.Execute();
         Calendar date = new GregorianCalendar(2001, Calendar.OCTOBER, 31);
         TimeCardTransaction tct = new TimeCardTransaction(date,8.0,empId);
@@ -115,7 +125,7 @@ public class TestPayroll extends TestCase{
     public void testSalesReceiptTransaction() {
         System.err.println("TestSalesReceiptTransaction");
         int empId = 3;
-        AddCommissionedEmployee t = new AddCommissionedEmployee(empId, "Lance", "Home", 2500, 3.2);
+        AddCommissionedEmployee t = makeCommissionedEmployee(empId);
         t.Execute();
         Calendar date = new GregorianCalendar(2001, Calendar.NOVEMBER, 12);
         SalesReceiptTransaction srt = new SalesReceiptTransaction(date, 25000, empId);
@@ -133,7 +143,7 @@ public class TestPayroll extends TestCase{
     public void testAddServiceCharge() {
         System.err.println("TestAddServiceCharge");
         int empId = 2;
-        AddHourlyEmployee t = new AddHourlyEmployee(empId, "Bill","Home",15.25);
+        AddHourlyEmployee t = makeHourlyEmployee(empId);
         t.Execute();
         Calendar date = new GregorianCalendar(2001, Calendar.OCTOBER, 31);
         TimeCardTransaction tct = new TimeCardTransaction(date,8.0, empId);
@@ -153,7 +163,7 @@ public class TestPayroll extends TestCase{
     public void testChangeNameTransaction() {
         System.err.println("TestChangeNameTransaction");
         int empId = 2;
-        AddHourlyEmployee t = new AddHourlyEmployee(empId, "Bill", "Home", 15.25);
+        AddHourlyEmployee t = makeHourlyEmployee(empId);
         t.Execute();
         ChangeNameTransaction cnt = new ChangeNameTransaction(empId, "Bob");
         cnt.Execute();
@@ -165,7 +175,7 @@ public class TestPayroll extends TestCase{
     public void testChangeAddressTransaction() {
         System.err.println("TestChangeAddressTransaction");
         int empId = 2;
-        AddHourlyEmployee t = new AddHourlyEmployee(empId, "Bill", "Home", 15.25);
+        AddHourlyEmployee t = makeHourlyEmployee(empId);
         t.Execute();
         ChangeAddressTransaction cat = new ChangeAddressTransaction(empId, "Second Home");
         cat.Execute();
@@ -177,9 +187,9 @@ public class TestPayroll extends TestCase{
     public void testChangeHourlyTransaction() {
         System.err.println("TestChangeHourlyTransaction");
         int empId = 3;
-        AddCommissionedEmployee t = new AddCommissionedEmployee(empId, "Lance", "Home",2500,3.2);
+        AddCommissionedEmployee t = makeCommissionedEmployee(empId);
         t.Execute();
-        ChangeHourlyTransaction cht = new ChangeHourlyTransaction(empId, 27.52);
+        ChangeHourlyTransaction cht = makeChangeHourlyTransaction(empId);
         cht.Execute();
         Employee e = GlobalDatabase.payrollDB.GetEmployee(empId);
         assertNotNull(e);
@@ -196,9 +206,9 @@ public class TestPayroll extends TestCase{
     public void testChangeSalariedTransaction() {
         System.err.println("TestChangeSalariedTransaction");
         int empId = 3;
-        AddCommissionedEmployee t = new AddCommissionedEmployee(empId, "Lance", "Home", 2500, 3.2);
+        AddCommissionedEmployee t = makeCommissionedEmployee(empId);
         t.Execute();
-        ChangeSalariedTransaction cst = new ChangeSalariedTransaction(empId, 25000);
+        ChangeSalariedTransaction cst = makeChangeSalariedTransaction(empId);
         cst.Execute();
         Employee e = GlobalDatabase.payrollDB.GetEmployee(empId);
         assertNotNull(e);
@@ -215,9 +225,9 @@ public class TestPayroll extends TestCase{
     public void testChangeCommissionedTransaction() {
         System.err.println("TestChangeCommissionedTransaction");
         int empId = 2;
-        AddHourlyEmployee t = new AddHourlyEmployee(empId, "Bill","Home",15.25);
+        AddHourlyEmployee t = makeHourlyEmployee(empId);
         t.Execute();
-        ChangeCommissionedTransaction cct = new ChangeCommissionedTransaction(empId, 25000, 4.5);
+        ChangeCommissionedTransaction cct = makeChangeCommissionedTransaction(empId);
         cct.Execute();
         Employee e = GlobalDatabase.payrollDB.GetEmployee(empId);
         assertNotNull(e);
@@ -235,9 +245,9 @@ public class TestPayroll extends TestCase{
     public void testChangeMailTransaction() {
         System.err.println("TestChangeMailTransaction");
         int empId = 2;
-        AddHourlyEmployee t = new AddHourlyEmployee(empId, "Bill", "Home", 15.25);
+        AddHourlyEmployee t = makeHourlyEmployee(empId);
         t.Execute();
-        ChangeMailTransaction cmt = new ChangeMailTransaction(empId, "4080 El Cerrito Road");
+        ChangeMailTransaction cmt = makeChangeMailTransaction(empId);
         cmt.Execute();
         Employee e = GlobalDatabase.payrollDB.GetEmployee(empId);
         assertNotNull(e);
@@ -251,9 +261,9 @@ public class TestPayroll extends TestCase{
     public void testChangeDirectTransaction() {
         System.err.println("TestChangeDirectTransaction");
         int empId = 2;
-        AddHourlyEmployee t = new AddHourlyEmployee(empId, "Bill", "Home", 15.25);
+        AddHourlyEmployee t = makeHourlyEmployee(empId);
         t.Execute();
-        ChangeDirectTransaction cdt = new ChangeDirectTransaction(empId, "FirstNational", "1058209");
+        ChangeDirectTransaction cdt = makeChangeDirectTransaction(empId);
         cdt.Execute();
         Employee e = GlobalDatabase.payrollDB.GetEmployee(empId);
         assertNotNull(e);
@@ -268,9 +278,9 @@ public class TestPayroll extends TestCase{
     public void testChangeHoldTransaction() {
         System.err.println("TestChangeHoldTransaction");
         int empId = 2;
-        AddHourlyEmployee t = new AddHourlyEmployee(empId, "Bill", "Home",15.25);
+        AddHourlyEmployee t = makeHourlyEmployee(empId);
         t.Execute();
-        ChangeHoldTransaction cht = new ChangeHoldTransaction(empId);
+        ChangeHoldTransaction cht = makeChangeHoldTransaction(empId);
         cht.Execute();
         Employee e = GlobalDatabase.payrollDB.GetEmployee(empId);
         assertNotNull(e);
@@ -284,9 +294,9 @@ public class TestPayroll extends TestCase{
         System.err.println("TestChangeMemberTransaction");
         int empId = 2;
         int memberId = 7734;
-        AddHourlyEmployee t = new AddHourlyEmployee(empId, "Bill","Home",15.25);
+        AddHourlyEmployee t = makeHourlyEmployee(empId);
         t.Execute();
-        ChangeMemberTransaction cmt = new ChangeMemberTransaction(empId, memberId, 99.42);
+        ChangeMemberTransaction cmt = makeChangeMemberTransaction(empId, memberId, 99.42);
         cmt.Execute();
         Employee e = GlobalDatabase.payrollDB.GetEmployee(empId);
         assertNotNull(e);
@@ -303,10 +313,10 @@ public class TestPayroll extends TestCase{
     public void testPaySingleSalariedEmployee() {
         System.err.println("TestPaySingleSalariedEmployee");
         int empId = 1;
-        AddSalariedEmployee t = new AddSalariedEmployee(empId,"Bob","Home",1000.0);
+        AddSalariedEmployee t = makeSalariedEmployee(empId, 1000.0);
         t.Execute();
         Calendar payDate = new GregorianCalendar(2001, Calendar.NOVEMBER,30);
-        PaydayTransaction pt = new PaydayTransaction(payDate);
+        PaydayTransaction pt = makePaydayTransaction(payDate);
         pt.Execute();
         ValidatePaycheck(pt, empId, payDate, 1000.0);
     }
@@ -314,10 +324,10 @@ public class TestPayroll extends TestCase{
     public void testPaySingleSalariedEmployeeOnWrongDate() {
         System.err.println("TestPaySingleSalariedEmployeeOnWrongDate");
         int empId = 1;
-        AddSalariedEmployee t = new AddSalariedEmployee(empId,"Bob","Home",1000.0);
+        AddSalariedEmployee t = makeSalariedEmployee(empId, 1000.0);
         t.Execute();
         Calendar payDate = new GregorianCalendar(2001, Calendar.NOVEMBER,29);
-        PaydayTransaction pt = new PaydayTransaction(payDate);
+        PaydayTransaction pt = makePaydayTransaction(payDate);
         pt.Execute();
         Paycheck pc = pt.GetPaycheck(empId);
         assertNull(pc);
@@ -326,10 +336,10 @@ public class TestPayroll extends TestCase{
     public void testPaySingleHourlyEmployeeNoTimeCards() {
         System.err.println("TestPaySingleHourlyEmployeeNoTimeCards");
         int empId = 2;
-        AddHourlyEmployee t = new AddHourlyEmployee(empId,"Bill","Home",15.25);
+        AddHourlyEmployee t = makeHourlyEmployee(empId);
         t.Execute();
         Calendar payDate = new GregorianCalendar(2001, Calendar.NOVEMBER, 9);
-        PaydayTransaction pt = new PaydayTransaction(payDate);
+        PaydayTransaction pt = makePaydayTransaction(payDate);
         pt.Execute();
         ValidatePaycheck(pt, empId, payDate, 0.0);
     }
@@ -337,12 +347,12 @@ public class TestPayroll extends TestCase{
     public void testPaySingleHourlyEmployeeOneTimeCard() {
         System.err.println("TestPaySingleHourlyEmployeeOneTimeCard");
         int empId = 2;
-        AddHourlyEmployee t = new AddHourlyEmployee(empId,"Bill","Home",15.25);
+        AddHourlyEmployee t = makeHourlyEmployee(empId);
         t.Execute();
         Calendar payDate = new GregorianCalendar(2001, Calendar.NOVEMBER, 9);
         TimeCardTransaction tc = new TimeCardTransaction(payDate, 2.0, empId);
         tc.Execute();
-        PaydayTransaction pt = new PaydayTransaction(payDate);
+        PaydayTransaction pt = makePaydayTransaction(payDate);
         pt.Execute();
         ValidatePaycheck(pt,empId,payDate,30.5);
     }
@@ -350,12 +360,12 @@ public class TestPayroll extends TestCase{
     public void testPaySingleHourlyEmployeeOvertimeOneTimeCard() {
         System.err.println("TestPaySingleHourlyEmployeeOvertimeOneTimeCard");
         int empId = 2;
-        AddHourlyEmployee t = new AddHourlyEmployee(empId,"Bill","Home",15.25);
+        AddHourlyEmployee t = makeHourlyEmployee(empId);
         t.Execute();
         Calendar payDate = new GregorianCalendar(2001, Calendar.NOVEMBER, 9);
         TimeCardTransaction tc = new TimeCardTransaction(payDate,9.0, empId);
         tc.Execute();
-        PaydayTransaction pt = new PaydayTransaction(payDate);
+        PaydayTransaction pt = makePaydayTransaction(payDate);
         pt.Execute();
         ValidatePaycheck(pt,empId,payDate,(8 + 1.5) * 15.25);
     }
@@ -363,12 +373,12 @@ public class TestPayroll extends TestCase{
     public void testPaySingleHourlyEmployeeOnWrongDate() {
         System.err.println("TestPaySingleHourlyEmployeeOnWrongDate");
         int empId = 2;
-        AddHourlyEmployee t = new AddHourlyEmployee(empId, "Bill", "Home",15.25);
+        AddHourlyEmployee t = makeHourlyEmployee(empId);
         t.Execute();
         Calendar payDate = new GregorianCalendar(2001, Calendar.NOVEMBER, 8);
         TimeCardTransaction tc = new TimeCardTransaction(payDate, 9.0, empId);
         tc.Execute();
-        PaydayTransaction pt = new PaydayTransaction(payDate);
+        PaydayTransaction pt = makePaydayTransaction(payDate);
         pt.Execute();
         Paycheck pc = pt.GetPaycheck(empId);
         assertNull(pc);
@@ -377,14 +387,14 @@ public class TestPayroll extends TestCase{
     public void testPaySingleHourlyEmployeeTwoTimeCards() {
         System.err.println("TestPaySingleHourlyEmployeeTwoTimeCards");
         int empId = 2;
-        AddHourlyEmployee t = new AddHourlyEmployee(empId, "Bill", "Home", 15.25);
+        AddHourlyEmployee t = makeHourlyEmployee(empId);
         t.Execute();
         Calendar payDate = new GregorianCalendar(2001, Calendar.NOVEMBER, 9);
         TimeCardTransaction tc = new TimeCardTransaction(payDate, 2.0, empId);
         tc.Execute();
         TimeCardTransaction tc2 = new TimeCardTransaction(new GregorianCalendar(2001, Calendar.NOVEMBER,8), 5.0, empId);
         tc2.Execute();
-        PaydayTransaction pt = new PaydayTransaction(payDate);
+        PaydayTransaction pt = makePaydayTransaction(payDate);
         pt.Execute();
         ValidatePaycheck(pt, empId,payDate,7 * 15.25);
     }
@@ -392,7 +402,7 @@ public class TestPayroll extends TestCase{
     public void testPaySingleHourlyEmployeeWithTimeCardsSpanningTwoPayPeriods() {
         System.err.println("TestPaySingleHourlyEmployeeWithTimeCardsSpanningTwoPayPeriods");
         int empId = 2;
-        AddHourlyEmployee t = new AddHourlyEmployee(empId, "Bill","Home",15.25);
+        AddHourlyEmployee t = makeHourlyEmployee(empId);
         t.Execute();
         Calendar payDate = new GregorianCalendar(2001, Calendar.NOVEMBER, 9);
         Calendar dateInPreviousPayPeriod = new GregorianCalendar(2001, Calendar.NOVEMBER, 2);
@@ -400,7 +410,7 @@ public class TestPayroll extends TestCase{
         tc.Execute();
         TimeCardTransaction tc2 = new TimeCardTransaction(dateInPreviousPayPeriod,5.0, empId);
         tc2.Execute();
-        PaydayTransaction pt = new PaydayTransaction(payDate);
+        PaydayTransaction pt = makePaydayTransaction(payDate);
         pt.Execute();
         ValidatePaycheck(pt, empId, payDate, 2 * 15.25);
     }
@@ -408,10 +418,10 @@ public class TestPayroll extends TestCase{
     public void testPaySingleCommissionedEmployeeNoSalesReceipts() {
         System.err.println("TestPaySingleCommissionedEmployeeNoSalesReceipts");
         int empId = 3;
-        AddCommissionedEmployee t = new AddCommissionedEmployee(empId, "Lance", "Home", 2500, 3.2);
+        AddCommissionedEmployee t = makeCommissionedEmployee(empId);
         t.Execute();
         Calendar payDate = new GregorianCalendar(2001, Calendar.NOVEMBER, 9);
-        PaydayTransaction pt = new PaydayTransaction(payDate);
+        PaydayTransaction pt = makePaydayTransaction(payDate);
         pt.Execute();
         ValidatePaycheck(pt, empId, payDate, 2500.00);
     }
@@ -419,12 +429,12 @@ public class TestPayroll extends TestCase{
     public void testPaySingleCommissionedEmployeeOneSalesReceipt() {
         System.err.println("TestPaySingleCommissionedEmployeeOneSalesReceipt");
         int empId = 3;
-        AddCommissionedEmployee t = new AddCommissionedEmployee(empId, "Lance", "Home", 2500, .032);
+        AddCommissionedEmployee t = makeAddCommissionedEmployee(empId);
         t.Execute();
         Calendar payDate = new GregorianCalendar(2001, Calendar.NOVEMBER, 9);
         SalesReceiptTransaction srt = new SalesReceiptTransaction(payDate, 13000.0, empId);
         srt.Execute();
-        PaydayTransaction pt = new PaydayTransaction(payDate);
+        PaydayTransaction pt = makePaydayTransaction(payDate);
         pt.Execute();
         ValidatePaycheck(pt, empId, payDate, 2500.0 + .032 * 13000);
     }
@@ -432,14 +442,14 @@ public class TestPayroll extends TestCase{
     public void testPaySingleCommissionedEmployeeTwoSalesReceipts() {
         System.err.println("TestPaySingleCommissionedEmployeeTwoSalesReceipts");
         int empId = 3;
-        AddCommissionedEmployee t = new AddCommissionedEmployee(empId, "Lance", "Home", 2500, .032);
+        AddCommissionedEmployee t = makeAddCommissionedEmployee(empId);
         t.Execute();
         Calendar payDate = new GregorianCalendar(2001, Calendar.NOVEMBER, 9);
         SalesReceiptTransaction srt = new SalesReceiptTransaction(payDate, 13000.0, empId);
         srt.Execute();
         SalesReceiptTransaction srt2 = new SalesReceiptTransaction(new GregorianCalendar(2001, Calendar.NOVEMBER, 8), 24000, empId);
         srt2.Execute();
-        PaydayTransaction pt = new PaydayTransaction(payDate);
+        PaydayTransaction pt = makePaydayTransaction(payDate);
         pt.Execute();
         ValidatePaycheck(pt, empId, payDate, 2500.0 + .032 * 13000 + .032 * 24000);
     }
@@ -447,7 +457,7 @@ public class TestPayroll extends TestCase{
     public void testPaySingleCommissionedEmployeeSpanMultiplePayPeriods() {
         System.err.println("testPaySingleCommissionedEmployeeSpanMultiplePayPeriods");
         int empId = 3;
-        AddCommissionedEmployee t = new AddCommissionedEmployee(empId, "Lance", "Home", 2500, .032);
+        AddCommissionedEmployee t = makeAddCommissionedEmployee(empId);
         t.Execute();
         Calendar earlyDate = new GregorianCalendar(2001, Calendar.NOVEMBER, 9); // Previous
         // pay
@@ -463,7 +473,7 @@ public class TestPayroll extends TestCase{
         srt2.Execute();
         SalesReceiptTransaction srt3 = new SalesReceiptTransaction(lateDate, 15000, empId);
         srt3.Execute();
-        PaydayTransaction pt = new PaydayTransaction(payDate);
+        PaydayTransaction pt = makePaydayTransaction(payDate);
         pt.Execute();
         ValidatePaycheck(pt, empId, payDate, 2500.0 + .032 * 13000);
     }
@@ -471,14 +481,14 @@ public class TestPayroll extends TestCase{
     public void testSalariedUnionMemberDues() {
         System.err.println("TestSalariedUnionMemberDues");
         int empId = 1;
-        AddSalariedEmployee t = new AddSalariedEmployee(empId, "Bob","Home",1000.0);
+        AddSalariedEmployee t = makeSalariedEmployee(empId, 1000.0);
         t.Execute();
         int memberId = 7734;
-        ChangeMemberTransaction cmt = new ChangeMemberTransaction(empId, memberId,9.42);
+        ChangeMemberTransaction cmt = makeChangeMemberTransaction(empId, memberId, 9.42);
         cmt.Execute();
         Calendar payDate = new GregorianCalendar(2001, Calendar.NOVEMBER, 30);
         int fridays = 5; // Fridays in Nov, 2001.
-        PaydayTransaction pt = new PaydayTransaction(payDate);
+        PaydayTransaction pt = makePaydayTransaction(payDate);
         pt.Execute();
         Paycheck pc = pt.GetPaycheck(empId);
         assertNotNull(pc);
@@ -492,15 +502,15 @@ public class TestPayroll extends TestCase{
     public void testHourlyUnionMemberDues() {
         System.err.println("TestHourlyUnionMemberDues");
         int empId = 1;
-        AddHourlyEmployee t = new AddHourlyEmployee(empId, "Bill","Home",15.24);
+        AddHourlyEmployee t = makeAddHourlyEmployee(empId);
         t.Execute();
         int memberId = 7734;
-        ChangeMemberTransaction cmt = new ChangeMemberTransaction(empId,memberId,9.42);
+        ChangeMemberTransaction cmt = makeChangeMemberTransaction(empId, memberId, 9.42);
         cmt.Execute();
         Calendar payDate = new GregorianCalendar(2001, Calendar.NOVEMBER, 9);
         TimeCardTransaction tct = new TimeCardTransaction(payDate, 8.0, empId);
         tct.Execute();
-        PaydayTransaction pt = new PaydayTransaction(payDate);
+        PaydayTransaction pt = makePaydayTransaction(payDate);
         pt.Execute();
         Paycheck pc = pt.GetPaycheck(empId);
         assertNotNull(pc);
@@ -514,13 +524,13 @@ public class TestPayroll extends TestCase{
     public void testCommissionedUnionMemberDues() {
         System.err.println("TestCommissionedUnionMemberDues");
         int empId = 3;
-        AddCommissionedEmployee t = new AddCommissionedEmployee(empId, "Lance", "Home", 2500,.032);
+        AddCommissionedEmployee t = makeAddCommissionedEmployee(empId);
         t.Execute();
         int memberId = 7734;
-        ChangeMemberTransaction cmt = new ChangeMemberTransaction(empId, memberId, 9.42);
+        ChangeMemberTransaction cmt = makeChangeMemberTransaction(empId, memberId, 9.42);
         cmt.Execute();
         Calendar payDate = new GregorianCalendar(2001, Calendar.NOVEMBER, 9);
-        PaydayTransaction pt = new PaydayTransaction(payDate);
+        PaydayTransaction pt = makePaydayTransaction(payDate);
         pt.Execute();
         Paycheck pc = pt.GetPaycheck(empId);
         assertNotNull(pc);
@@ -534,17 +544,17 @@ public class TestPayroll extends TestCase{
     public void testHourlyUnionMemberServiceCharge() {
         System.err.println("TestHourlyUnionMemberServiceCharge");
         int empId = 1;
-        AddHourlyEmployee t = new AddHourlyEmployee(empId, "Bill", "Home", 15.24);
+        AddHourlyEmployee t = makeAddHourlyEmployee(empId);
         t.Execute();
         int memberId = 7734;
-        ChangeMemberTransaction cmt = new ChangeMemberTransaction(empId, memberId, 9.42);
+        ChangeMemberTransaction cmt = makeChangeMemberTransaction(empId, memberId, 9.42);
         cmt.Execute();
         Calendar payDate = new GregorianCalendar(2001, Calendar.NOVEMBER,9);
         ServiceChargeTransaction sct = new ServiceChargeTransaction(memberId, payDate, 19.42);
         sct.Execute();
         TimeCardTransaction tct = new TimeCardTransaction(payDate,8.0,empId);
         tct.Execute();
-        PaydayTransaction pt = new PaydayTransaction(payDate);
+        PaydayTransaction pt = makePaydayTransaction(payDate);
         pt.Execute();
         Paycheck pc = pt.GetPaycheck(empId);
         assertNotNull(pc);
@@ -558,10 +568,10 @@ public class TestPayroll extends TestCase{
     public void testServiceChargesSpanningMultiplePayPeriods() {
         System.err.println("TestServiceChargesSpanningMultiplePayPeriods");
         int empId = 1;
-        AddHourlyEmployee t = new AddHourlyEmployee(empId, "Bill", "Home", 15.24);
+        AddHourlyEmployee t = makeAddHourlyEmployee(empId);
         t.Execute();
         int memberId = 7734;
-        ChangeMemberTransaction cmt = new ChangeMemberTransaction(empId, memberId, 9.42);
+        ChangeMemberTransaction cmt = makeChangeMemberTransaction(empId, memberId, 9.42);
         cmt.Execute();
         Calendar earlyDate = new GregorianCalendar(2001, Calendar.NOVEMBER, 2); // Previous
         // Friday
@@ -576,7 +586,7 @@ public class TestPayroll extends TestCase{
         sctLate.Execute();
         TimeCardTransaction tct = new TimeCardTransaction(payDate, 8.0, empId);
         tct.Execute();
-        PaydayTransaction pt = new PaydayTransaction(payDate);
+        PaydayTransaction pt = makePaydayTransaction(payDate);
         pt.Execute();
         Paycheck pc = pt.GetPaycheck(empId);
         assertNotNull(pc);
@@ -596,4 +606,57 @@ public class TestPayroll extends TestCase{
         assertEquals(0.0, pc.GetDeductions());
         assertEquals(pay, pc.GetNetPay());
     }
+
+    private AddSalariedEmployee makeSalariedEmployee(int empId, double salary) {
+        return (AddSalariedEmployee) itsTransactionFactory.makeAddSalariedEmployee(empId, "Bob", "Home", salary);
+    }
+
+    private AddHourlyEmployee makeHourlyEmployee(int empId) {
+        return (AddHourlyEmployee) itsTransactionFactory.makeAddHourlyEmployee(empId, "Bill", "Home", 15.25);
+    }
+
+    private AddCommissionedEmployee makeCommissionedEmployee(int empId) {
+        return (AddCommissionedEmployee) itsTransactionFactory.makeAddCommissionedEmployee(empId, "Lance","Home",2500,3.2);
+    }
+
+    private ChangeMailTransaction makeChangeMailTransaction(int empId) {
+        return (ChangeMailTransaction) itsTransactionFactory.makeChangeMailTransaction(empId, "4080 El Cerrito Road");
+    }
+
+    private ChangeHourlyTransaction makeChangeHourlyTransaction(int empId) {
+        return (ChangeHourlyTransaction) itsTransactionFactory.makeChangeHourlyTransaction(empId, 27.52);
+    }
+
+    private ChangeSalariedTransaction makeChangeSalariedTransaction(int empId) {
+        return (ChangeSalariedTransaction) itsTransactionFactory.makeChangeSalariedTransaction(empId, 25000);
+    }
+
+    private ChangeCommissionedTransaction makeChangeCommissionedTransaction(int empId) {
+        return (ChangeCommissionedTransaction) itsTransactionFactory.makeChangeCommissionedTransaction(empId, 25000, 4.5);
+    }
+
+    private ChangeDirectTransaction makeChangeDirectTransaction(int empId) {
+        return (ChangeDirectTransaction) itsTransactionFactory.makeChangeDirectTransaction(empId, "FirstNational", "1058209");
+    }
+
+    private ChangeHoldTransaction makeChangeHoldTransaction(int empId) {
+        return (ChangeHoldTransaction) itsTransactionFactory.makeChangeHoldTransaction(empId);
+    }
+
+    private ChangeMemberTransaction makeChangeMemberTransaction(int empId, int memberId, double dues) {
+        return (ChangeMemberTransaction) itsTransactionFactory.makeChangeMemberTransaction(empId, memberId, dues);
+    }
+
+    private PaydayTransaction makePaydayTransaction(Calendar payDate) {
+        return (PaydayTransaction) itsTransactionFactory.makePaydayTransaction(payDate);
+    }
+
+    private AddCommissionedEmployee makeAddCommissionedEmployee(int empId) {
+        return (AddCommissionedEmployee) itsTransactionFactory.makeAddCommissionedEmployee(empId, "Lance", "Home", 2500, .032);
+    }
+
+    private AddHourlyEmployee makeAddHourlyEmployee(int empId) {
+        return (AddHourlyEmployee) itsTransactionFactory.makeAddHourlyEmployee(empId, "Bill","Home",15.24);
+    }
+
 }
\ No newline at end of file