特点 :将调用者和创建者分离,调用者直接向工厂类请求获取调用对象,减少代码耦合,提高系统的维护性和扩展性。

<?php
// **** 共同接口 **** //
interface DB {
function conn();
} interface factory {
function createDB();
} // **** 服务端开发 **** //
class dbMysql implements DB {
public function conn() {
echo '连接上了 mysql 数据库!';
}
} class mysqlFactory implements factory {
public function createDB() {
return new dbMysql();
}
} class dbSqlite implements DB {
public function conn() {
echo '连接上了 sqlite 数据库!';
}
} class sqliteFactory implements factory {
public function createDB() {
return new dbSqlite();
}
} // 这是开发中后来增加的 oracle 数据库;
// 不需要修改上面原来的代码;
// 这就是程序的开闭原则:修改关闭,增加开放。
class dbOracle implements DB {
public function conn() {
echo '连接上了 oracle 数据库!';
}
} class oracleFactory implements factory {
public function createDB() {
return new dbOracle();
}
} // **** 客户端调用 **** //
$factory = new mysqlFactory();
$db = $factory->createDB();
$db->conn(); echo '<br>'; $factory = new sqliteFactory();
$db = $factory->createDB();
$db->conn(); echo '<br>';
// 这是开发中后来增加的 oracle 数据库连接
$factory = new oracleFactory();
$db = $factory->createDB();
$db->conn();

最新文章

  1. [转]passport.js学习笔记
  2. 关于最少VC号数目的猜想
  3. Effective Java阅读笔记——引言
  4. Backbone Collection——数据模型集合
  5. RabbitMQ介绍2 - AMQP协议
  6. NGUI的UIProgressBar使用裁剪方式而不是压缩方式的方法
  7. Python手动构造Cookie模拟登录后获取网站页面内容
  8. Poj Roadblocks(次短路)
  9. iOS常用宏定义
  10. 保证Android后台不被杀死的几种方法
  11. struts2上传文件类型列表
  12. Python 中的登陆获取数据跳转页面(不含数据库)
  13. rhel7 启动网络
  14. java ReentrantLock结合条件队列 实现生产者-消费者模式 以及ReentratLock和Synchronized对比
  15. Shell编程(week4_day2)--技术流ken
  16. linux对4T硬盘进行分区
  17. sql server Local Service, Local System or Network Service
  18. Project Euler 54
  19. Hexo站点之域名配置【2】
  20. Java 中 Emoji 的正则表达式

热门文章

  1. li的inline-block出现间隙原因,解决方案
  2. 关于Python文件读写
  3. 基于TCP和UDP的Socket通信
  4. cpu绘图的本质:生成图片的二进制(数字)信息
  5. Codeforces 1038 D. Slime
  6. 设置hystrix的熔断时间
  7. PHP获取一年有多少周和每周开始和结束日期
  8. JSON Web Token (JWT) - Introduction
  9. LeetCode 1110. Delete Nodes And Return Forest
  10. pipelinewise 学习二 创建一个简单的pipeline