publicclassAFactoryextendsComputerFactory{publicStringgetName(){return"A";}publicProduct[]getProducts(){returnnull;}publicProductgetProduct(intproductID){switch(productID){case1:returnnewProductA();case2:returnnewProductB();default:thrownewIllegalArgumentException("Sorry you hit the wrong factory, we closed down in 1600 BC");}}}
publicclassFactoryManager{privatestaticFactoryManagerfactoryManager=null;privateFactoryManager(){}publicstaticFactoryManagergetInstance(){if(factoryManager!=null){returnfactoryManager;}elsereturnfactoryManager=newFactoryManager();}publicComputerFactorygetFactory(intfactory)throwsIllegalArgumentException{switch(factory){caseFactoryConstants.A:returnnewIBMFactory();caseFactoryConstants.B:returnnewSUNFactory();default:thrownewIllegalArgumentException("Sorry you hit the wrong factory, we closed down in 1600 BC");}}}