适配器模式(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. [Unity 3D] Unity 3D 性能优化 (一)

    听到过很多用Unity 3D开发游戏的程序员抱怨引擎效率太低,资源占用太高,包括我自己在以往项目的开发中也头疼过.最近终于有了空闲,可以仔细的研究一下该如何优化Unity 3D下的游戏性能.其实国外有 ...

  2. BZOJ 2287: 【POJ Challenge】消失之物( 背包dp )

    虽然A掉了但是时间感人啊.... f( x, k ) 表示使用前 x 种填满容量为 k 的背包的方案数, g( x , k ) 表示使用后 x 种填满容量为 k 的背包的方案数. 丢了第 i 个, 要 ...

  3. 面向对象(类,实例变量,方法定义,方法重载,构造方法,this,string类)

    面向对象 类是由属性和方法组成 类是所有创建对象的模板 实例变量有默认值 实例变量至少在本类范围中有效 实例变量与局部变量冲突时,局部变量优先 类中方法定义类似于函数定义 修饰符 返回值类型 方法名( ...

  4. MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件

    原文  MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件 UI 前沿技术 WPF 中的多点触控操作事件 Charles Petzold 下载代码示例 就在过去几年,多点触控还只是科幻电 ...

  5. Java网络编程:利用Java mail包发送电子邮件

    下面代码是利用Java mail包封装了一个发送邮件的类 import java.io.File; import java.util.ArrayList; import java.util.Date; ...

  6. MUI跳转页面传值

    1.打开新的页面.通过 mui.openWindow 打开页面extras参数传递参数 mui.openWindow({ id: "yingshou-" + newid, url: ...

  7. JVM调优总结(十一)-反思

    垃圾回收的悖论 所谓“成也萧何败萧何”.Java的垃圾回收确实带来了很多好处,为开发带来了便利.但是在一些高性能.高并发的情况下,垃圾回收确成为了制约Java应用的瓶颈.目前JDK的垃圾回收算法,始终 ...

  8. Bertelsmann Asia Investments, 简称BAI

    聚焦龙宇:贝塔斯曼的中国风险投资之路 _财经_腾讯网 贝塔斯曼亚洲投资基金(Bertelsmann Asia Investments, 简称BAI )

  9. 在VS中实现webService的一个demo(图解)

    在VS中实现webService的一个demo(图解) 先创建一个web项目,创建好web项目后,添加新建项——web服务 在新建好的web服务文件中写如下代码: 生成当前解决方案. 新建一个winf ...

  10. [Windows Phone]常用类库&API推荐

    原文 [Windows Phone]常用类库&API推荐 简介: 把自己的应用程序搭建在稳定的API之上,这会使得我们在开发时能把精力都集中在程序的业务逻辑之上,避免重复造轮子,并且使得程序结 ...