Creo que el patrón que vendría bien sería, no Template sino Strategy: construir un "uploader" abstracto (clase abstracta o interfaz) y seguir una u otra "estrategia" (PEAR, el de PHP por defecto, otro futuro...). Más info en
http://www.ibm.com/developerworks/li...p-designptrns/. Siento no poder ayudarte con el tema del uploader, pero estoy bastante verde en esa librería.