I don't think you can create synonyms on tables that already exist. You should get this error: ORA-00955. While a public synonym will only work when you don't specify schemas when addressing objects e.g. select * from foo rather than select * from larry.foo. Furthermore public synonyms are inherently a security risk. Instead you can switch to green/blue deployments.
Set up your object for green/blue
-- rename your table/mv/view this will make your object unavailable one last time
alter table foo rename to foo_green;
-- create your synonym
create SYNONYM foo for foo_green;
-- make a new version of foo
create table foo_blue as select * from foo;
-- update your synonym. This will swap the tables
create or replace SYNONYM foo for foo_blue;
It should be fairly straightforward to script out swapping tables in an out by determining which table the synonym is currently point to.