I find it more likely that the programmer is accepting the data into data structures that he/she created - one row at a time. Getting data from a cursor generally does not work in the way you state - in fact, it will grab the number of rows and store them with the number of rows in the array_size parameter. And, I know of practically no one in the world that sets it to one.
Anyways, there is a feature called the "result cache" that would more than likely resolve your problems - have a look at the following paper to work with the programmer and tune the code to more efficiently use the cache area, especially for repeated queries:
https://docs.oracle.com/database/121/TGDBA/tune_result_cache.htm#TGDBA626