适配器模式(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 C++ 源码 vs2019 工具,设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式...
c++设计模式-结构型模式-适配器模式,其他工程,c++源码。适配器模式(Adapter)的定义如下:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。
适配器模式 设计模式 Adapter 还请各位大S指教
适配器模式(Adapter Pattern) 是作为两个不兼容接口之间的桥梁, 这种类型的设计模式属于结构型模式。 一些书籍也称适配器模式为缺省适配器模式(Default Adapter Pattern) 。 适配器模式主要分 为三类: 类...
适配器模式是一种结构型设计模式,它允许接口不兼容的两个类可以协同工作。以下是该模式的要点: 1. **角色**: - **Target(目标接口)**:客户端期望调用的接口。 - **Adaptee(适配者)**:现有的、接口与目标...
设计模式C++学习之适配器模式(Adapter)
java中的适配器模式,Adapter设计模式(包装器)23种设计模式之一
java设计模式之适配器模式,希望对大家有所帮助。
设计模式之适配器模式(Adapter Pattern) 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
1.1 什么是设计模式 2 1.2 Smalltalk MVC 中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...
javascript设计模式之Adapter模式【适配器模式】实现方法示例.docx
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要资源分。敬请期待。 这是第7节:结构型...
C++设计模式课件16_Adapter_适配器.pdf
走进设计模式之——适配器模式 (Adapter) 对应代码
Head First 设计模式 (七) 适配器模式(Adapter pattern) C++实现
C#设计模式之适配器模式应用实例
介绍24设计模式中的Adapter模式,如果使用,实例讲解,等等
4.1 ADAPTER(适配器)——对象结构型模式 4.2 BRIDGE(桥接)——对象结构型模式 4.3 COMPOSITE(组成)——对象结构型模式 4.4 DECORATOR(装饰)——对象结构型模式 4.5 FACADE(外观)——对象结构型模式 4.6 ...
C#面向对象设计模式纵横谈(7):Adapter 适配器模式(结构型模式) 体验课程