我们可能会遇到这种情况,为了实现一些业务逻辑,我们会对同一个对象来回重建进行业务处理
比如说做试卷,老师除了一套试卷,学生们拿到试卷只有两个地方不一样,填写的答案和名字
这样的话,整体的算法骨架是一定的,你只需要固定出来一套题就可以,子类去修改其中一两部
应用情境:数据库中间层的抽象类
上代码
- <?php
- //模板设计模式创建了一个实施一组方法的抽象对象,子类通常将这个对象作为模板用于自己的设计。
- //一般会用于数据库抽象类。
- abstract class dbbaseInit{
- /**
- * 抽象数据库链接
- * @param string $host sql服务器
- * @param string $user 数据库用户名
- * @param string $password 数据库登录密码
- * @param string $database 数据库
- * @param string $charset 编码
- * @param string $pconnect 是否持久链接
- */
- abstract protected function connect($host,$user,$password,$database,$charset='utf-8',$pconnect=0);
- /**
- * 抽象数据库执行语句
- * @param string $sql SQL语句
- * @return obj
- */
- abstract protected function query($sql);
- /**
- * 抽象数据库-结果集中的行数
- * @param $result 结果集
- * @return array
- */
- abstract protected function result($result,$num=1);
- /**
- * 抽象数据库-从结果集中取得一行作为关联数组
- * @param $result 结果集
- * @return array
- */
- //这个方法没用过(不是数字索引而是字段)
- abstract protected function fetch_assoc($result);
- /**
- * 抽象数据库-从结果集中取得列信息并作为对象返回
- * @param $result 结果集
- * @return array
- */
- abstract protected function fetch_fields($result);
- /**
- * 抽象数据库-前一次操作影响的记录数
- * @return int
- */
- //这个也没有用过
- abstract protected function affected_rows();
- /**
- * 抽象数据库-结果集中的行数
- * @param $result 结果集
- * @return int
- */
- abstract protected function num_rows($result);
- /**
- * 抽象数据库-结果集中的字段数量
- * @param $result 结果集
- * @return int
- */
- abstract protected function num_fields($result);
- /**
- * 抽象数据库-获取上一INSERT的ID值
- * @return Int
- */
- abstract protected function insert_id();
- /**
- * 抽象数据库-释放结果内存
- * @param obj $result 需要释放的对象
- */
- abstract protected function free_result($result);
- /**
- * 抽象数据库链接关闭
- * @param string $sql SQL语句
- * @return obj
- */
- abstract protected function close();
- /**
- * 错误信息
- * @return string
- */
- abstract protected function error();
- }
- //这是具体的某个数据库,比如MySQL,oracle
- class mysqliInit extends dbbaseInit{
- public $link_id;
- //重写模型中的连接类
- public function connect($host,$user,$password,$database,$charset='utf8',pconnect=0){
- $link_id = ($pconnect==0)?mysqli_connect($host,$user,$password):mysqli_pconnect($host,$user,$password);
- if(!$link_id) die('mysql connect error!');
- mysql_query($link_id,'set names'.$charset);
- if(!mysqli_select_db($link_id,$database)) die('database is not exist');
- return $link_id;
- }
- public function query($sql){
- return mysqli_query($this->link_id,$sql);
- }
- public function result($result,$num=1){
- return mysqli_result($result,$num);
- }
- public function fetch_assoc($result){
- return mysqli_fetch_assoc($result);
- }
- public function fetch_fields($result){
- return mysqli_num_fields($result);
- }
- public function free_result($result){
- return mysqli_free_result($result);
- }
- public function insert_id(){
- return mysqli_insert_id($this->link_id);
- }
- public function affected_rows() {
- return mysqli_affected_rows($this->link_id);
- }
- public function close(){
- if($this->link_id!==null) $mysqli_close($this->link_id);
- $this->link_id = null;
- return true;
- }
- public function error(){
- return mysqli_error($this->link_id);
- }
- }
- ?>
有点累了,设计模式常用的先学到这里,后续的以后再说,
愿法界众生,皆得安乐
来源: http://www.bubuko.com/infodetail-2252581.html