ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php实现工厂模式设计系统运行日志记录器

2021-04-05 15:03:43  阅读:270  来源: 互联网

标签:运行日志 记录器 配置文件 工厂 具体 LogFactory php echo


实例类图:

抽象工厂: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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有