2 jiangweifeng1997 jiangweifeng1997 于 2015.06.06 10:07 提问

求教简单C++ OOP题目 关于Log库的简易编写 5C

Log是用来对复杂程序进行调试的常用手段,用来实现log的库也是我们非常常用的程序
库之一。请你设计一个简化的log程序库,做到如下几点:
a) 能够支持三种不同的log目的地(控制台、文件、数据库)及这三种目的地的自由
组合,目的地可以动态变化,未来可能需要加入更多种类的目的地(比如限制长度
的文件);
b) 能够支持三种不同的log格式(简单不带任何附加信息,附带短格式表示的当前时
间,附带长格式表示的当前时间),格式可以动态变化(即可以在log 对象产生之
后动态修改其使用的log格式),以后可能需要加入更多种类的格式;
c) 支持对string类型进行log操作。
请针对这几点需求对这个程序库进行设计,不要求实际实现功能,只要在相应功能处
用输出语句输出标记即可。

1个回答

caozhy
caozhy   Ds   Rxr 2015.06.06 11:49
 abstract class IWriterSerivce
{
    public: void Write(string context) = 0;
}
class FileWriter : public IWriterSerivce
{
    public: void Write(string context) { / * 将context写入文件 */ }
};
class DBWriter : public IWriterSerivce
{
    public: void Write(string context) { / * 将context写入数据库 */ }
};
class ConsoleWriter : public IWriterSerivce
{
    public: void Write(string context) { / * 将context输出控制台 */ }
};
class LogBase
{
    protected: IWriterSerivce ** services;
        protected: int servicecount = 0;
        protected: virtual string formatLog(string s) { return s; }
        public: void Write(string s)
        {
            string fs = formatLog(s);
            for (int i = 0; i < servicecount; i++)
                {
                     services[i]->Write(fs);
                }
        }
};
class SimpleLog : public LogBase
{
    protected virtual string formatLog(string s) { return 格式化(s); }
};
class ShortDateTimeLog : public LogBase
{
    protected virtual string formatLog(string s) { return 格式化(s); }
};
class LongDateTimeLog : public LogBase
{
    protected virtual string formatLog(string s) { return 格式化(s); }
};
使用:
比如说我要用输出控制台、文件,短日期:
class MyLog : public ShortDateTimeLog
{
    public MyLog()
        {
    services = new IWriteService[2];
        service[0] = new FileWriter();
        service[1] = new ConsoleWriter();
        servicecount = 2;
        }
};

MyLog log;
log.Write(yourstring);
Csdn user default icon
上传中...
上传图片
插入图片