Skip to main content

Factory Pattern : Real Life Example and Java Code Example

Factory Pattern

The Factory Pattern is actually a method(factory method) which is used to create objects on the basis of runtime requirements.


Real Life Example:

The factory method is same as the real world factory, It gives the same kind of object with different(based on the input) behavior. For example, There is a machine in a factory which takes wood and paints as input and gives a painted box as the final product. We can create different boxes by just changing the color of paint in the input.


Java Code Example:

Before going to codes, We need to see some key points about factory method implementation.

  • We need an interface(Suppose A is an interface).
  • Then We need various implementations of A (Suppose B, C, D are implementing A).
  • Finally, We need a Factory class with a factory method. The factory method must have the return type of A.

Find the below problem and its solution using the factory method.

Suppose We need to build an application KNOW ABOUT ANIMALS. The application is simple and just take input an animal(like Lion, Deer, Dog ...etc) and display the details and behaviors of the animal.

/**************** The Interface******************/ 
package test.factory;

/**
 * The interface
 * Created by chaudharys on 16/4/17.
 */
public interface Animal {
    void desc();
}


/*********** The Implementations******************/

package test.factory;

/**
 * Created by chaudharys on 16/4/17.
 */
public class Tiger implements Animal{
    public void desc(){
        System.out.println("Tiger is big cat.");
    }
}


package test.factory;

/**
 * Created by chaudharys on 16/4/17.
 */
public class Elephant implements Animal {
    public void desc(){
        System.out.println("Elephant has unique body part called trunk.");
    }
}


/*************** The Factory *******************/



package test.factory;

/**
 * Created by chaudharys on 16/4/17.
 */
public class AnimalFactory {
 //factory method
    public Animal getAnimal(String animal){
        if("Tiger".equalsIgnoreCase(animal)){
            return new Tiger();
        }else if("Elephant".equalsIgnoreCase(animal)){
            return new Elephant();
        }else{
            return null;
        }
    }
}


Comments

Popular posts from this blog

com.mongodb.MongoCommandException: Command failed with error 18: 'Authentication failed.' on server

If you are trying to connect Mongo DB Server and it insanely throwing following error. com.mongodb.MongoTimeoutException : Timed out after 1000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. Client view of cluster state is {type=UNKNOWN, servers=[{address=192.168.1.10:27010, type=UNKNOWN, state=CONNECTING, exception={ com.mongodb.MongoSecurityException: Exception authenticating MongoCredential {mechanism=null, userName='user123', source='admin', password=<hidden>, mechanismProperties={}}}, caused by {com.mongodb.MongoCommandException: Command failed with error 18 : 'Authentication failed.' on server 192.168.1.10:27010 . The full response is { "ok" : 0.0, "code" : 18, "errmsg" : "Authentication failed." }}}] If you start looking the error content First you encounter with Timeout Exception which may mislead you. It is basically an authentication error. I...

How to Create a Namespace in Aerospike Database

                      T his post is about creating a namespace in Aerospike. I could not find any concrete method to create a namespace like create database in MySQL and MongoDB. So I am suggesting a way to create a namespace in Aerospike Database. Step-1: Locate config file aerospike.conf and open it in your favorite editor and make sure you have permission to modify the file. In my system the path of file /etc/aerospike/aerospike.conf (Default in Ubuntu). Here the content of the file. # Aerospike database configuration file. service { user root group root paxos-single-replica-limit 1 # Number of nodes where the replica pidfile /var/run/aerospike/asd.pid service-threads 4 transaction-queues 4 transaction-threads-per-queue 4 proto-fd-max 15000 } logging { # Log file must be an absolute path. file /var/log/aerospike/aerospike.log { context any info } } net...

java.lang.IllegalArgumentException: Could not instantiate implementation: org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftStoreManager

If you are trying to get started with Janus Graph with Apache Cassandra. You may get the following error. Caused by: org.janusgraph.diskstorage.TemporaryBackendException: Temporary failure in storage backend at org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftStoreManager.getCassandraPartitioner(CassandraThriftStoreManager.java:219) ~[janusgraph-cassandra-0.2.0.jar:na] at org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftStoreManager.<init>(CassandraThriftStoreManager.java:198) ~[janusgraph-cassandra-0.2.0.jar:na] ... 48 common frames omitted Caused by: org.apache.thrift.transport.TTransportException: java.net.ConnectException: Connection refused (Connection refused) at org.apache.thrift.transport.TSocket.open(TSocket.java:187) ~[libthrift-0.9.2.jar:0.9.2] at org.apache.thrift.transport.TFramedTransport.open(TFramedTransport.java:81) ~[libthrift-0.9.2.jar:0.9.2] at org.janusgraph.diskstorage.cassandra.thrift.thriftpool.CTConnectionFactory.makeR...