实现不修改原代码,扩展新功能

<?php
header("Content-type:text/html;charset=utf-8");
/**
* db接口
* 实现连接数据库函数conn
*/
interface db
{
function conn();
}
/**
* 工厂接口
* 实现创建连接函数createDb
*/
interface factory
{
function createDb();
} /**
* mysql类
*/
class DbMysql implements db
{
public function conn()
{
echo "连接上了mysql<br>";
}
} /**
* sqlite类
*/
class DbSqlite implements db
{
public function conn()
{
echo "连接上了sqlite<br>";
}
} /**
* MysqlFactory
*/
class MysqlFactory implements factory
{ public function createDb()
{
return new DbMysql();
}
}
/**
* SqliteFactory
*/
class SqliteFactory implements factory
{ public function createDb()
{
return new DbSqlite();
}
} //不修改源代码,扩展oracle数据库
/**
* oracle
*/
class DbOracle implements db
{
public function conn()
{
echo "连上了oracle数据库<br>";
}
}
/**
* oracle工厂类
*/
class OracleFactory implements factory
{
public function createDb()
{
return new DbOracle();
}
} // 客户端调用
$factory = new MysqlFactory();
$db = $factory->createDb();
$db->conn();
$factory = new SqliteFactory();
$db = $factory->createDb();
$db->conn(); $factory = new OracleFactory();
$db = $factory->createDb();
$db->conn();

最新文章

  1. Oracle循环中的EXIT、RETURN、CONTINUE解密
  2. OC 观察者模式(通知中心,KVO)
  3. Android基础面试题
  4. Android Volley 框架的使用(一)
  5. org.springframework.jdbc.BadSqlGrammarException
  6. 路径名称和struts.xml配置不一致导致struts2报404
  7. 干货:VLDB论文摘要-阿里技术突破性创新
  8. 使用JS动态创建含有1000行的表格
  9. always block內省略else所代表的電路
  10. C# 解析User-Agent工具
  11. return ajax 把ajax链式操作 简易封装
  12. Omi框架学习之旅 - 插件机制之omi-router及原理说明
  13. ORM框架(ITDOS实战源码)
  14. ASP.NET MVC同时支持web与webapi模式
  15. npm安装包很慢
  16. ASP.NET 控件不可编辑
  17. C++操作符优先级带来的错误
  18. 微信小程序,页面分享
  19. IT英语累积
  20. Neutron相关资料链接

热门文章

  1. 【database】oracle集合 - Associative Arrays、Varrays、Nested Tables
  2. SDN的深入思考(1):SDN的核心本质到底是什么?
  3. 内置中间件CommonMiddleware
  4. 教你阅读Python开源项目代码
  5. Error in nextTick: &quot;TypeError: Cannot set property &#39;xxx&#39; of undefined&quot;解决办法
  6. 批量获取mysql数据库实例指定参数的值
  7. maven - 一键删除maven仓库无效jar包工具
  8. Scrum简介
  9. JavaDay3(上)
  10. shell脚本执行sql命令