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