我们可能会遇到这种情况,为了实现一些业务逻辑,我们会对同一个对象来回重建进行业务处理


比如说做试卷,老师除了一套试卷,学生们拿到试卷只有两个地方不一样,填写的答案和名字


这样的话,整体的算法骨架是一定的,你只需要固定出来一套题就可以,子类去修改其中一两部


应用情境:数据库中间层的抽象类


上代码

<?php//模板设计模式创建了一个实施一组方法的抽象对象,子类通常将这个对象作为模板用于自己的设计。//一般会用于数据库抽象类。abstractclassdbbaseInit{/***抽象数据库链接*@paramstring$hostsql服务器*@paramstring$user数据库用户名*@paramstring$password数据库登录密码*@paramstring$database数据库*@paramstring$charset编码*@paramstring$pconnect是否持久链接*/abstractprotectedfunctionconnect($host,$user,$password,$database,$charset='utf-8',$pconnect=0);/***抽象数据库执行语句*@paramstring$sqlSQL语句*@returnobj*/abstractprotectedfunctionquery($sql);/***抽象数据库-结果集中的行数*@param$result结果集*@returnarray*/abstractprotectedfunctionresult($result,$num=1);/***抽象数据库-从结果集中取得一行作为关联数组*@param$result结果集*@returnarray*///这个方法没用过(不是数字索引而是字段)abstractprotectedfunctionfetch_assoc($result);/***抽象数据库-从结果集中取得列信息并作为对象返回*@param$result结果集*@returnarray*/abstractprotectedfunctionfetch_fields($result);/***抽象数据库-前一次操作影响的记录数*@returnint*///这个也没有用过abstractprotectedfunctionaffected_rows();/***抽象数据库-结果集中的行数*@param$result结果集*@returnint*/abstractprotectedfunctionnum_rows($result);/***抽象数据库-结果集中的字段数量*@param$result结果集*@returnint*/abstractprotectedfunctionnum_fields($result);/***抽象数据库-获取上一INSERT的ID值*@returnInt*/abstractprotectedfunctioninsert_id();/***抽象数据库-释放结果内存*@paramobj$result需要释放的对象*/abstractprotectedfunctionfree_result($result);/***抽象数据库链接关闭*@paramstring$sqlSQL语句*@returnobj*/abstractprotectedfunctionclose();/***错误信息*@returnstring*/abstractprotectedfunctionerror();}//这是具体的某个数据库,比如MySQL,oracleclassmysqliInitextendsdbbaseInit{public$link_id;//重写模型中的连接类publicfunctionconnect($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('mysqlconnecterror!');mysql_query($link_id,'setnames'.$charset);if(!mysqli_select_db($link_id,$database))die('databaseisnotexist');return$link_id;}publicfunctionquery($sql){returnmysqli_query($this->link_id,$sql);}publicfunctionresult($result,$num=1){returnmysqli_result($result,$num);}publicfunctionfetch_assoc($result){returnmysqli_fetch_assoc($result);}publicfunctionfetch_fields($result){returnmysqli_num_fields($result);}publicfunctionfree_result($result){returnmysqli_free_result($result);}publicfunctioninsert_id(){returnmysqli_insert_id($this->link_id);}publicfunctionaffected_rows(){returnmysqli_affected_rows($this->link_id);}publicfunctionclose(){if($this->link_id!==null)$mysqli_close($this->link_id);$this->link_id=null;returntrue;}publicfunctionerror(){returnmysqli_error($this->link_id);}}?>



有点累了,设计模式常用的先学到这里,后续的以后再说,


愿法界众生,皆得安乐