PHP设计模式,抽象工厂介绍
抽象工厂
提供创建一系列
相关或相互依赖对象的接口,而无需指定他们具体的类
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
与工厂方法区别
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
优点
易于交换产品系列
缺点
新增功能时要增加的类比较多,至少要增加三个类
PHP代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| <?php
namespace AbstractFactory;
interface db { function conn();
}
interface user { function insertUser(); }
interface Factory { function createDB();
function createUser(); }
class dbmysql implements db { function conn() { echo "connect mysql!"; } }
class dbsqlite implements db { function conn() { echo "connect sqlite!"; } }
class userMysql implements user { function insertUser() { echo "insert mysql user!"; } }
class userSqlite implements user { function insertUser() { echo "insert sqlite user!"; } }
class mysqlFactory implements Factory { function createDB() { return new dbmysql(); }
function createUser() { return new userMysql(); } }
class sqliteFactory implements Factory { function createDB() { return new dbsqlite(); }
function createUser() { return new userSqlite(); } }
$fact = new mysqlFactory();
$db = $fact->createDB(); $db->conn();
$user = $fact->createUser(); $user->insertUser();
|