🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
~~~ <?php /** * 特点:将调用者与创建者分离,调用者直接向工厂请求,减少代码的耦合.提高系统的可维护性与可扩展性. * 缺点:当要修改类的时候,工厂类也需要做出相对应的更改,违反了开闭原则 * 只知道服务端开放了一个Factory::createDb()方法 * 方法只允许传递数据库名称,如果新增一个oracle需要修改Factory(比较麻烦) * 面向对象设计法则中,重要的开闭原则--对于修改是封闭的,对于扩展是开放的 */ interface Db{ function conn(); } class DbMysql implements Db { function conn(){ return "mysql conn"; } } class DbSqlite implements Db{ function conn(){ return "sqlite conn"; } } class PersonFactory{ const MYSQL = "mysql"; const SQLITE = "sqlite"; public static function getInstanc($db){ switch ($db){ case self::MYSQL: return new DbMysql(); case self::SQLITE: return new DbSqlite(); default: return null; } } } //调用 $mysql = PersonFactory::getInstanc(PersonFactory::MYSQL); $sqlite = PersonFactory::getInstanc(PersonFactory::SQLITE); echo $mysql->conn(); echo $sqlite->conn(); ~~~