Using one subsystem in multiple commands is the correct usage pattern - there's no need to get around it.
The problem is that in your DriveTrain constructor, you declare and instantiate a local RobotDrive object instead of initializing the member variable. The quickest fix is just to remove the data type, i.e. change:
Code:
RobotDrive drive = new RobotDrive(RobotMap.frontLeftMotor, RobotMap.rearLeftMotor, RobotMap.frontRightMotor, RobotMap.rearRightMotor);
to
Code:
drive = new RobotDrive(RobotMap.frontLeftMotor, RobotMap.rearLeftMotor, RobotMap.frontRightMotor, RobotMap.rearRightMotor);
[ edit ]
And the same change should be applied to the enc variable.