php实现工厂模式设计系统运行日志记录器
作者:互联网
实例类图:
抽象工厂:LogFactory.php
<?php
interface LogFactory{
public function createLog();
}
抽象产品:Logger.php
<?php
interface Logger{
public function writeLog();
}
具体产品:数据库日志记录器 DatabaseLog.php
<?php
require_once "Logger.php";
class DatabaseLog implements Logger
{
public function writeLog(){
echo "数据库记录日志中...";
}
}
具体产品:文件日志记录器 FileLog.php
<?php
require_once "Logger.php";
class FileLog implements Logger
{
public function writeLog(){
echo "文件记录日志中...";
}
}
具体工厂:数据库工厂 DatabaseLogFactory.php
<?php
require_once "LogFactory.php";
require_once "DatabaseLog.php";
class DatabaseLogFactory implements LogFactory
{
public function createLog(){
return new DatabaseLog();
}
}
具体工厂:文件工厂 FileLogFactory.php
<?php
require_once "LogFactory.php";
require_once "FileLog.php";
class FileLogFactory implements LogFactory
{
public function createLog(){
return new FileLog();
}
}
配置文件:用户通过修改配置文件中的工厂名称可以灵活地更换日志记录方式 config.php
<?php
return[
'a'=>'FileLogFactory',
'b'=>'DatabaseLogFactory',
'c'=>'aLogFactory'
];
客户端:Client.php
<?php
class Client{
public static function main(){
$config=require_once "config.php";
foreach ($config as $val){
$file=$val.".php";
if(is_file("./$file")){//config文件里的文件名存在时
include "$val.php";
$file=new $val();
$files=$file->createLog();
echo $files->writeLog();
echo "\n";
}else{
echo "您输入的工厂名未记录,是否创建新的工厂呢?";
fwrite(STDOUT, "请输入‘Y’or‘N’ ");
$lan = trim(fgets(STDIN));//输入的字符
if($lan=='Y'){
//判断输入的工厂名称是否合法
if(substr($val,-10,10)!=='LogFactory'){
echo "您输入的工厂名称有问题,请以LogFactory结尾!";
}else{
$nameA=substr($val,0,strlen($val)-10);//将工厂名切割后的前一部分名字
if($lan=='Y'){
$fileLog=$nameA."Log";//具体产品
$fileFactory=$nameA."LogFactory";//具体工厂
//创建具体产品
$a= fopen($fileLog.".php", "w") or die("Unable to open file!");
//写入文件内容
$fileLogText="<?php
require_once 'Logger.php';
class $fileLog implements Logger
{
public function writeLog(){
echo '$fileLog 工作中';
}
}";
fwrite($a, $fileLogText);//写入
//创建具体工厂
$b= fopen($fileFactory.".php", "w") or die("Unable to open file!");
$fileFactoryText="<?php
require_once \"LogFactory.php\";
require_once \"$fileLog.php\";
class $fileFactory implements LogFactory
{
public function createLog(){
return new $fileLog();
}
}";
fwrite($b,$fileFactoryText);
echo "创建工厂成功\n";
}
}
}elseif ($lan=='N'){
echo "谢谢使用";
}else{
echo "请输入Y OR N 哦";
}
}
}
}
}
Client::main();
说明:客户端会根据配置文件中传入的工厂名做出相应的判断,若工厂名已经存在则进行相应的正确反馈。若不存在则询问客户是否需要新建工厂,客户回答Y则会判断传入的工厂名是否合法(以LogFactory结尾),合法则创建具体工厂和具体产品。不合法则给出提示。用户回答N则退出询问。用户回答其它答案则给出提示后退出询问。具体实现还有许多不足,若有更好的方法望提出。
祝天天开心~
标签:运行日志,记录器,配置文件,工厂,具体,LogFactory,php,echo 来源: https://blog.csdn.net/Moxi099/article/details/115442207