适配器模式(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();

}

}

设计模式(三)-- 适配器模式(Adapter)的更多相关文章

  1. 8.3 GOF设计模式二: 适配器模式 Adapter

    GOF设计模式二: 适配器模式 Adapter  为中国市场生产的电器,到了美国,需要有一个转接器才能使用墙上的插座,这个转接 器的功能.原理?复习单实例模式  SingleTon的三个关键点  ...

  2. 怎样让孩子爱上设计模式 —— 7.适配器模式(Adapter Pattern)

    怎样让孩子爱上设计模式 -- 7.适配器模式(Adapter Pattern) 标签: 设计模式初涉 概念相关 定义: 适配器模式把一个类的接口变换成client所期待的还有一种接口,从而 使原本因接 ...

  3. 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern)

    原文:乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) 作者:webabc ...

  4. 【设计模式】适配器模式 Adapter Pattern

    适配器模式在软件开发界使用及其广泛,在工业界,现实中也是屡见不鲜.比如手机充电器,笔记本充电器,广播接收器,电视接收器等等.都是适配器. 适配器主要作用是让本来不兼容的两个事物兼容和谐的一起工作.比如 ...

  5. 二十四种设计模式:适配器模式(Adapter Pattern)

    适配器模式(Adapter Pattern) 介绍将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作.示例有一个Message实体类 ...

  6. 研磨设计模式解析及python代码实现——(三)适配器模式(Adapter)

    一.适配器模式定义 将一个类的接口转换成另外一个接口,适配器模式使得原本由于接口不兼容,而不能在一起工作的哪些类能够在一起工作. 二.python 实现 import string import cP ...

  7. JavaScript设计模式 Item9 --适配器模式Adapter

    适配器模式(转换器面模式),通常是为要使用的接口,不符本应用或本系统使用,而需引入的中间适配层类或对象的情况. 适配器模式的作用是解决两个软件实体间的接口不兼容的问题. 一.定义 适配器模式(Adap ...

  8. python 设计模式之适配器模式 Adapter Class/Object Pattern

    #写在前面 看完了<妙味>和<华医>,又情不自禁的找小说看,点开了推荐里面随机弹出的<暗恋.橘生淮南>,翻了下里面的评论,有个读者从里面摘了一段自己很喜欢的话出来, ...

  9. java设计模式之六适配器模式(Adapter)

    适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题.主要分为三类:类的适配器模式.对象的适配器模式.接口的适配器模式.首先,我们来看看类的适配器模 ...

  10. 设计模式之适配器模式(Adapter)(6)

    简介 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象.那么如果将“将现存的对象”在新的环境中进行调用呢? ...

随机推荐

  1. Arcgis镶嵌数据集java代码操作

    转自:http://www.cdtarena.com/javapx/201307/9105.html 镶嵌数据集结合了之前arcgis管理影像的栅格目录和栅格数据集,为解决海量影像管理提供了很好的方案 ...

  2. Qt属性系统

    The Property System Qt提供一个类似于其他编译器供应商提供的精致的属性系统.然而,作为一个编译器和平台独立的库,Qt并不依赖于非标准编译器特性,如__property 或 [pro ...

  3. Android学习笔记:ActionBar使用介绍

    一.基本概念 最权威和官方的介绍请看google的api文档 http://developer.android.com/training/basics/actionbar/setting-up.htm ...

  4. 【COCOS2D-HTML5 开发之三】演示样例项目附源代码及执行的GIF效果图

    本站文章均为李华明Himi原创,转载务必在明显处注明:(作者新浪微博:@李华明Himi) 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/cocos2d- ...

  5. 阿里云CentOS配置iptables防火墙[转]

    虽说阿里云推出了云盾服务,但是自己再加一层防火墙总归是更安全些,下面是我在阿里云vps上配置防火墙的过程,目前只配置INPUT.OUTPUT和FORWORD都是ACCEPT的规则 一.检查iptabl ...

  6. EFM32在使用IAR开发环境配置ICf文件以及指定程序存储地址空间

    EFM32在IAR开发环境下指定代码,数据的存储空间 为了便于后续的项目升级,管理,需要对代码,数据的存储空间加以设定,也在网上找下相关的资料,笔者水平有限, 如下内容不一定完全正确,如有错误之后,还 ...

  7. hdu4708 Rotation Lock Puzzle

    Rotation Lock Puzzle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...

  8. Linux下sed,awk,grep,cut,find学习笔记

    awk awk是一种程序语言,对文档资料的处理具有很强的功能.awk擅长从格式化报文或从一个大的文本文件中抽取数据. awk的命令格式为: awk [-F filed-separator] “comm ...

  9. android第一天-------环境搭建

    今天正式第一天学习android的. 1.昨晚下班后回家跟同事刘江龙打了四把dota.还好,都赢了把对面虐成狗了.大多都是1300到1450的局,玩的很爽. 2.dota打完后给在湖南常德的女朋友打了 ...

  10. windows live writer插件说明文档(附录网盘地址)

    百度云地址:http://pan.baidu.com/s/1hqnjzjY 1.Screen Capture tool 用于直接在WLWriter中进行截图的一个插件,要配合SnagIt 这个软件使用 ...