Please give me suggetions for upgrading oracle software and database with minimum downtime.

I have think about below solution.

1. Install oracle software at two locations with different ORACLE_BASE and ORACLE_HOME. PFILE is same at both ORACLE_BASE.

2. I always keeps both the ORACLE_HOME at same version of oracle.

3. Whenever required to apply new path. I install the patch at another ORACLE_HOME. I got downtime during night. so at that
time upgrade the database. i.e run catpatch.sql, gathering statistics etc.

4. Startup the database.

5. Then after I install path at previous ORACLE_HOME. so both the ORACLE_HOME will be at the same version.

Is there any other way to minimize downtime ?