Replace Constructor with Factory Method Pattern.Why lets take a case
Suppose you have class like
A complex constructor that does something more than just setting parameter values in object fields.
Solution:
class Employee {
static Employee create(int type) {
employee = new Employee(type);
// do some heavy lifting.
return employee;
}
//...
}
when to use Factory Method Pattern:
- when a class cant guess the type of object it supposed to create.
-when a class wants its subclass to be the ones to specific the type of a newly created object.
-when we want to localize the knowledge of which class gets created.
Example:
public interface AppLogger{
public void log(String logMsg);
}
public class FileLogger implements AppLogger
{
public void log(String logMsg)
{
FileUtil futil=new FileUtil();
futil.writeTOFile("Logging.txt",logMsg,true,true);
}
}
public class DatabaseLogger implements AppLogger
{
public void log(String logMsg)
{
// open database connection
// write log to it.
}
}
public class ConsoleLogger implements AppLogger
{
public void log(String logMsg)
{
System.out.println("Console" + logMsg);
}
}
public class LoggerFactory
{
public Logger getLogger(int value)
{
if(value==1){ return new FileLogger();}
else if(value==2){ return new DatabaseLogger();}
elseif(value == 3){ return new ConsoleLogger();}
}
}
public class LoggerFactoryTest{
public static void main(String args[])
{
LoggerFacrory factory=new LoggerFactory();
AppLogger logger=factory.getLogger(1);
logger.log("Message to file");
logger=factory.getLogger(2);
logger.log("Message to Database");
}
}
No comments:
Post a Comment