zoukankan      html  css  js  c++  java
  • 设计模式(三)-- 适配器模式(Adapter)

    适配器模式(Adapter)

    考虑一个记录日志的应用,由于用户对日志记录的要求很高,使得开发人员不能简单地采用一些已有的日志工具或日志框架来满足用户的要求,而需要按照用户的要求重新开发新的日志管理系统,如需要用文件和数据库形式分别保存日志数据。

    适配器模式的定义是将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

    public classLogModel {

        privateString logId;

        privateString operateUser;

        privateString operateTime;

        privateString logContent;

        

        publicString getLogId(){

         return logId;

        }

        publicvoidsetLogId(String logId){

         this.logId= logId;

        }

        publicString getOperateUser(){

         return operateUser;

        }

        publicvoidsetOperateUser(String operateUser){

         this.operateUser=operateUser;

        }

        publicString getOperateTime(){

         return operateTime;

        }

        publicvoidsetOperateTime(String operateTime){

         this.operateTime=operateTime;

        }

        publicString getLogContent(){

         return logContent;

        }

        publicvoidsetLogContent(String logContent){

         this.logContent=logContent;

        }

    }

    import java.util.List;

     

    public interfaceLogFileOperateApi {

         publicList<LogModel> readLogFile();

         publicvoidwriteLogFile(List<LogModel> list);

    }

    import java.util.List;

     

    public interfaceLogDbOperateApi {

        publicvoidcreateLog(LogModel lm);

        publicvoidupdateLog(LogModel lm);

        publicvoidremoveLog(LogModel lm);

        publicList<LogModel>getAllLog();

    }

    import java.io.BufferedInputStream;

    import java.io.BufferedOutputStream;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.io.ObjectInputStream;

    import java.io.ObjectOutputStream;

    import java.util.List;

     

    public classLogFileOperate implements LogFileOperateApi{

     

        private String logFilePathName = "test.log";

        public LogFileOperate(StringlogFilePathName){

            if(logFilePathName!=null &&logFilePathName.trim().length()>0){

                this.logFilePathName=logFilePathName;

            }

        }

        @Override

        public List<LogModel>readLogFile() {

            // TODO Auto-generated method stub

            List<LogModel>list = null;

            ObjectInputStreamoin = null;

            try{

                Filef = newFile(logFilePathName);

                if(f.exists()){

                    oin=new ObjectInputStream(new BufferedInputStream(new FileInputStream(f)));

                    list=(List<LogModel>)oin.readObject();

                }

            }catch(Exception e){

                e.printStackTrace();

            }finally{

                try{

                    if(oin!=null){

                        oin.close();

                    }

                }catch(IOException e){

                    e.printStackTrace();

                }

            }

            return list;

        }

     

        @Override

        public voidwriteLogFile(List<LogModel> list) {

            // TODO Auto-generated method stub

            Filef=newFile(logFilePathName);

            ObjectOutputStreamoout=null;

            try{

                oout=new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(f)));

                oout.writeObject(list);

            }catch(IOException e){

                e.printStackTrace();

            }finally{

                try{

                    oout.close();

                }catch(IOException e){

                    e.printStackTrace();

                }

            }

        }

     

    }

    import java.util.List;

     

    public classLogDbOperate implements LogDbOperateApi{

     

        @Override

        public void createLog(LogModel lm){

            // TODO Auto-generated method stub

            System.out.println("now in LogDbOperate createLog,lm="+lm);

        }

     

        @Override

        public void updateLog(LogModel lm){

            // TODO Auto-generated method stub

            System.out.println("now in LogDbOperate updateLog,lm="+lm);

        }

     

        @Override

        public void removeLog(LogModel lm){

            // TODO Auto-generated method stub

            System.out.println("now in LogDbOperate removeLog,lm="+lm);

        }

     

        @Override

        public List<LogModel>getAllLog() {

            // TODO Auto-generated method stub

            System.out.println("now in LogDbOperate getAllLog");

            return null;

        }

     

    }

    import java.util.List;

     

    public classTwoDirectAdapter implements LogDbOperateApi,LogFileOperateApi{

       

        private LogFileOperateApi fileLog;

        private LogDbOperateApi dbLog;

       

        publicTwoDirectAdapter(LogFileOperateApi fileLog,LogDbOperateApi dbLog){

            this.fileLog=fileLog;

            this.dbLog=dbLog;

        }

        @Override

        public List<LogModel>readLogFile() {

            // TODO Auto-generated method stub

            return null;

        }

     

        @Override

        public voidwriteLogFile(List<LogModel> list) {

            // TODO Auto-generated method stub

           

        }

     

        @Override

        public void createLog(LogModel lm){

            // TODO Auto-generated method stub

            List<LogModel>list=fileLog.readLogFile();

            list.add(lm);

            fileLog.writeLogFile(list);

        }

     

        @Override

        public void updateLog(LogModel lm){

            // TODO Auto-generated method stub

           

        }

     

        @Override

        public void removeLog(LogModel lm){

            // TODO Auto-generated method stub

            List<LogModel>list=fileLog.readLogFile();

            list.remove(lm);

            fileLog.writeLogFile(list);

        }

     

        @Override

        public List<LogModel>getAllLog() {

            // TODO Auto-generated method stub

            return fileLog.readLogFile();

        }

     

    }

    import java.util.ArrayList;

    import java.util.List;

     

    public classClient {

         publicstaticvoidmain(String[] args){

          LogModel lm = new LogModel();

          lm.setLogId("001");

          lm.setOperateUser("admin");

          lm.setOperateTime("2010-03-22");

          lm.setLogContent("this is just for testing on purpose");

          List<LogModel> list=newArrayList<LogModel>();

          list.add(lm);

          LogFileOperateApi fileLogApi=new LogFileOperate("");

          LogDbOperateApi dbLogApi=new LogDbOperate();

          LogFileOperateApi fileLogApi2=newTwoDirectAdapter(fileLogApi,dbLogApi);

          LogDbOperateApi dbLogApi2=newTwoDirectAdapter(fileLogApi,dbLogApi);

          dbLogApi2.createLog(lm);

          List<LogModel>allLog=dbLogApi2.getAllLog();

          System.out.println(allLog);

          fileLogApi2.writeLogFile(list);

          fileLogApi2.readLogFile();

         }

    }

  • 相关阅读:
    Hive 导入、导出数据
    mysql 命令行参数说明
    mysql 查看表信息
    python之冒泡排序
    python之选择排序
    python之快速排序
    光荣之路测试开发面试linux考题之四:性能命令
    测试开发linux面试之三:后台进程之操作
    测试开发面试的Linux面试题总结之二:常用命令
    测试开发面试的Linux面试题总结之一:vim使用方法
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3177956.html
Copyright © 2011-2022 走看看