Class-based Message System Pattern
Seems you are on the right way. But mostly depends how will the client use your factory and BasePackage.
Here are some my minor remarks for improvements:


Only BasePackage is to be public, all the implementation classes are to be hidden.
makePackage() should return BasePackage type.
To reduce possible 5..6 arguments think about varargs solution.
Yes, you may have factory as a static, because you don't have an internal state (at least for now).
Naming: if possible rename BasePackage to reflect your domain area. BasePackage for client perspective may be not clear. But it is ok if you have good package hierarchy.