Question: This confuses me, in the most simplest terms what does it do? Pretend you are explaining to your mother or someone almost please.

Answer: 
Factory design pattern is very good when you are dealing with multiple resources and want to implement high level abstraction.

Let's break this into different section.

Suppose you have to implement abstraction and the user of your class doesn't need to care about what you've implemented in class definition. 

He/She just need to worry about the use of your class methods.

e.g. You have two databases for your project 

```
class MySQLConn {

        public function __construct() {
                echo "MySQL Database Connection" . PHP_EOL;
        }

        public function select() {
                echo "Your mysql select query execute here" . PHP_EOL;
        }

}

class OracleConn {

        public function __construct() {
                echo "Oracle Database Connection" . PHP_EOL;
        }

        public function select() {
                echo "Your oracle select query execute here" . PHP_EOL;
        }

}

```

Your Factory class would take care of the creation of object for database connection.

```
class DBFactory {

        public static function getConn($dbtype) {

                switch($dbtype) {
                        case "MySQL":
                                $dbobj = new MySQLConn();
                                break;
                        case "Oracle":
                                $dbobj = new OracleConn();
                                break;
                        default:
                                $dbobj = new MySQLConn();
                                break;
                }

                return $dbobj;
        }

}

```

User just need to pass the name of the database type

```
$dbconn1 = DBFactory::getConn("MySQL");
$dbconn1->select();

```

Output:

```
MySQL Database Connection
Your mysql select query execute here

```

In future you may have different database then you don't need to change the entire code only need to pass the new database type and other code will run without making any changes.

```
$dbconn2 = DBFactory::getConn("Oracle");
$dbconn2->select();

```

Output:

```
Oracle Database Connection
Your oracle select query execute here

```

Hope this will help.
A factory just generates an object or objects.

You may have a factory that builds a MySQL connection.

<http://en.wikipedia.org/wiki/Factory_method_pattern>