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; } }