最简单的理解工厂方法的伪代码
- 一句话什么是工厂模式? 让所有的new都通过第三方加工生成,直接调第三方。代码中不出现new
- 好处, 改动提供功能者代码, 不改动调用处代码。
- 类似,博主silvercell 和几个好兄弟在北京中关村大厦吃盖饭, 7个人吃盖饭,饭店做饭需要 new7次。
- 大餐车盒饭。 我吃 = 餐车 :: 分餐() , 兄弟吃= 餐车 :: 分餐()
- 我们要求要吃水煮鱼,饭店第二天对菜单做修改,还是一车,但多了菜。工厂改动,调用不变。
- 业务还是, 我吃 = 餐车 :: 分餐() , 兄弟1吃= 餐车 :: 分餐(), 餐车改动跟我的调用方法无关。
```php
namespace Factory;
// 工厂模式, 使用工厂方法、类 生成对象,不直接在代码里面 newclass DB {}
class Factory {
static function createDB(...很多参数)
{
// ... 各种处理
$db = new DB;
return $db;
}
}
// 使用, 就算使用100次,也是这么调用,功能变了工厂代码修改,调用不变。
Factory::createDB();//好处:
// 1. 工厂方法生成后返回的是一个生成好的对象,与产生对象过程高内聚,与调用耦合度低
// 2. 如果生成对象的方法进行变化, 只需要对工厂方法自身做变化,不对外部使用产生影响// -------------------------------------------------//
class DB {
private $IP;
private $PORT;
private $DB_TYPE;
private $USER;
private $PASS;
private $RES;public function __construct($ip , $port, $db_type, $user, $pass)
{
$this->IP = $ip;
$this->PORT = $port;
$this->DB_TYPE = $db_type;
$this->USER = $user;
$this->PASS = $pass;
$this->connect_db();
//... 直接让连接返回
return $this->RES;
}private function connect_db()
{
try {
// ... some method connect db ..
$this->RES = 'connect';
}catch( Exception $e){
//log($e->getMessage());
// ...
}
}}
$db1 = new DB('147.22.8.21', '3306', 'mysql', 'root' , '12345');
$db2 = new DB('147.22.8.21', '3306', 'mysql', 'root' , '12345');
$db3 = new DB('147.22.8.21', '3306', 'mysql', 'root' , '12345');
$db4 = new DB('147.22.8.21', '3306', 'mysql', 'root' , '12345');// 突然,不需要 $db_type , 要将参数变成 4个。 是不是每个 new DB() 都要修改
// 回头看, 第一种工厂方法, 完全不需要, 在所有的地方都改, 工厂里怎么改都行,不用去各处new里面改```