package com.anby.Adapter;
import java.awt.List;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.sql.Date;
import java.util.ArrayList;
import javax.print.attribute.standard.DateTimeAtCompleted;
/**
* 适配器模式: 为了拓展之前的功能: 之前:之前LogFileOperationApi接口只实现了readFileLog,writeFileLog
* 为了需求现有功能需要扩展,
* 现在:那么增加了LogDbOperateApi实现createLog,updateLog,removeLog,getAllLog
*
* 思路:1,将已有的功能封装到适配器中Adapter
* 2, Adapter中接受已有的功能类,
* 3,重新封装功能
*
* @author Anby
*
*/
public class AdapterDemo
{
public static void main(String[] args)
{
LogModel lml=new LogModel();
lml.setLogid("001");
lml.setOperateuser("admin");
lml.setOperatetime("2010-03-02");
lml.setLogcontent("test!");
ArrayList<LogModel> list=new ArrayList<LogModel>();
list.add(lml);
LogFileOperationApi logFileApi=new LogFileOperation("");
LogDbOperateApi api=new Adapter(logFileApi);
api.createLog(lml);
java.util.List<LogModel> alllog=(java.util.List<LogModel>) api.getAllLog();
}
}
//模板类
class LogModel
{
private String logid;
private String operateuser;
private String operatetime;
private String logcontent;
public String getLogid()
{
return logid;
}
public void setLogid(String logid)
{
this.logid = logid;
}
public String getOperateuser()
{
return operateuser;
}
public void setOperateuser(String operateuser)
{
this.operateuser = operateuser;
}
public String getOperatetime()
{
return operatetime;
}
public void setOperatetime(String operatetime)
{
this.operatetime = operatetime;
}
public String getLogcontent()
{
return logcontent;
}
public void setLogcontent(String logcontent)
{
this.logcontent = logcontent;
}
public LogModel(String logid, String operateuser, String operatetime,
String logcontent)
{
this.logid = logid;
this.operateuser = operateuser;
this.operatetime = operatetime;
this.logcontent = logcontent;
}
public LogModel()
{
}
public String toString()
{
return "LogMode [logid=" + logid + ", operateuser=" + operateuser
+ ", operatetime=" + operatetime + ", logcontent=" + logcontent
+ "]";
}
}
//之前的功能接口
interface LogFileOperationApi
{
public java.util.List<LogModel> readFileLog() throws Exception;
public void writeFileLog(java.util.List<LogModel> list);
}
//实现接口的方法
class LogFileOperation implements LogFileOperationApi
{
private String FilePath;
public LogFileOperation(String filePath)
{
if (FilePath != null && FilePath.trim().length() > 0)
{
FilePath = filePath;
}
}
public java.util.List<LogModel> readFileLog() throws Exception
{
java.util.List<LogModel> list = null;
FileReader fileReader = new FileReader("c:\\test.txt");
char[] buffer = new char[1024];
int ch = 0;
while ((ch = fileReader.read(buffer)) != -1)
{
}
fileReader.read();
return list;
}
public void writeFileLog(java.util.List<LogModel> list)
{
File file = new File(FilePath);
ObjectOutputStream oout = null;
try
{
oout = new ObjectOutputStream(new BufferedOutputStream(
new FileOutputStream(file)));
oout.writeObject(list);
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
try
{
oout.close();
}
catch (Exception e2)
{
e2.printStackTrace();
}
}
}
}
//后期扩展
interface LogDbOperateApi
{
public void createLog(LogModel lm);
public void updateLog(LogModel lm);
public void removeLog(LogModel lm);
public java.util.List<LogModel> getAllLog();
}
//扩展接口的实现类
class Adapter implements LogDbOperateApi
{
//传入之前的接口对象
private LogFileOperationApi adaptee;
public Adapter(LogFileOperationApi adaptee)
{
this.adaptee = adaptee;
}
//利用之前接口的方法重新封装日志处理
public void createLog(LogModel lm)
{
// 1,先读取文件的内容;
java.util.List<LogModel> list;
try
{
list = adaptee.readFileLog();
list.add(lm);
adaptee.writeFileLog(list);
}
catch (Exception e)
{
e.printStackTrace();
}
}
public void updateLog(LogModel lm)
{
java.util.List<LogModel> list;
try
{
list = adaptee.readFileLog();
for (int i = 0; i < list.size(); i++)
{
if (list.get(i).getLogid().equals(lm.getLogid()))
;
list.set(i, lm);
break;
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
public void removeLog(LogModel lm)
{
// 1,读取文件的内容
java.util.List<LogModel> list;
try
{
list = adaptee.readFileLog();
// 2,删除相应的日志对象
list.remove(lm);
adaptee.writeFileLog(list);
}
catch (Exception e)
{
e.printStackTrace();
}
}
public java.util.List<LogModel> getAllLog()
{
try
{
return adaptee.readFileLog();
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
}