适配器模式(二)-----简单的实现一个适配器模式
来源:互联网 发布:淘宝开店教程全集下载 编辑:程序博客网 时间:2024/05/21 08:44
利用适配器模式的解决问题
案例:
我们先来看这样的一个需求,客户需要我们实现一个文件的日志管理,客户要求日志以文件的形式记录(第一版)。软件完成交给客户,当客户使用了一段时间后,考虑升级系统,决定要采用数据库来管理日志(第二版)。很快,按照数据库的日志管理也实现出来了,并定义了日志管理的操作接口,主要针对日志的增删查改方法。这时客户又提出了新的要求,能不能让日志管理第二版实现同时支持数据库存储和文件存储两种方式。
分析:
解决办法:利用对象组合的方式使用适配器模式
代码如下:
(1)日志对象
<pre name="code" class="java"> package adapter1;/** * 日志数据对象 * @author Administrator * */public class LogModel { //日志编号 private String logid; //操作人员 private String operateUser; //操作时间 private String operateTime; //日志内容 private String logContent; public LogModel(String logid, String operateUser, String operateTime, String logContent) { super(); this.logid = logid; this.operateUser = operateUser; this.operateTime = operateTime; this.logContent = 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; } @Override public String toString() { return "LogModel [logid=" + logid + ", operateUser=" + operateUser + ", operateTime=" + operateTime + ", logContent=" + logContent + "]"; }}
(2)操作日志的接口
package adapter1;import java.util.List;/** * 日志文件操作接口 * @author Administrator * */public interface LogFileOperateApi { /** * 读取日志文件,从文件里面获取存储的日志列表对象 * @return 日志列表对象 */ public List<LogModel> readLogFile(); /** * 写日志文件,把日志列表写出到日志文件中去 * @param list */ public void writeLogFile(List<LogModel> list);}(3)实现日志文件的存取
package adapter1;import java.util.List;/** * 实现对日志文件的操作 * @author Administrator * */public class LogFileOperate implements LogFileOperateApi { /** * 简单的写了个方法的实现 */ @Override public List<LogModel> readLogFile() { // TODO Auto-generated method stub System.out.println("正在读日志文件。。。。。"); return null; //本应该返回读取的日志 此时当做null处理 } @Override public void writeLogFile(List<LogModel> list) { // TODO Auto-generated method stub System.out.println("正在写日志文件。。。。。"); }}(4)定义操作日志的应用接口,为了实例的简单,只是简单的定义了增删查改方法
package adapter1;import java.util.List;/** * 定义操作日志的应用接口,为了实例的简单,只是简单的定义了增删查改方法 * @author Administrator * */public interface LogDbOperateApi { //增 void createLog(LogModel lm); //删 void removeLog(LogModel lm); //查 List<LogModel> getAll(); //改 void updateLog(LogModel lm);}
(5)适配器对象,将记录日志到文件的功能适配成第二版需要的增删查改功能
package adapter1;import java.util.List;/** * 适配器对象,将记录日志到文件的功能适配成第二版需要的增删查改功能 * @author Administrator * */public class Adapter implements LogDbOperateApi{ //持有需要被适配的接口对象 private LogFileOperateApi adaptee; //构造方法,传入需要被适配的对象 public Adapter(LogFileOperateApi adaptee) { super(); this.adaptee = adaptee; } @Override public void createLog(LogModel lm) { // TODO Auto-generated method stub System.out.println("通过被适配的接口对象增加日志文件---"+ "adaptee.readLogFile();adaptee.writeLogFile(list);"); } @Override public void removeLog(LogModel lm) { // TODO Auto-generated method stub System.out.println("通过被适配的接口对象删除日志文件---"+ "adaptee.readLogFile();adaptee.writeLogFile(list);"); } @Override public List<LogModel> getAll() { // TODO Auto-generated method stub System.out.println("通过被适配的接口对象查找日志文件---"+ "adaptee.readLogFile()"); return null; } @Override public void updateLog(LogModel lm) { // TODO Auto-generated method stub System.out.println("通过被适配的接口对象修改文件---"+ "adaptee.readLogFile();adaptee.writeLogFile(list);"); }}(6)客户端代码
package adapter1;import java.util.ArrayList;import java.util.List;public class Client { public static void main(String[] args) { LogModel lm = new LogModel("01", "admin", "2016-3-4 23:47", "测试适配器模式"); List<LogModel> list = new ArrayList<LogModel>(); list.add(lm); //创建日志文件对象 LogFileOperateApi logFileApi = new LogFileOperate(); //创建新版本日志接口对象 LogDbOperateApi api = new Adapter(logFileApi); //保存日志文件 api.createLog(lm); //读取日志文件的内容 api.getAll(); }}
从头认识适配器模式:
适配器的实现方式是依靠对象组合的方式。通过给适配器对象组合被适配的对象,然后客户端调用Target的时候,适配器会把相应的功能委托给被适配的对象去完成。适配器的主要功能就是进行转换,目的是服用已有的功能,而不是来实现新的接口。也就是说,客户端需要的功能应该是已经实现好的,不需要适配器模式来实现,适配器模式主要负责把不兼容的接口转换成客户端期望的样子就可以了。但是过多的使用适配器,会让系统非常零乱,不容易整体把握。因此如果不是很有必要,可以不使用适配器,而是 直接对系统重构。
0 0
- 适配器模式(二)-----简单的实现一个适配器模式
- 简单的适配器模式
- 适配器模式(二)
- 一个简单的适配器模式例子
- java的适配器模式简单代码实现
- 适配器设计模式简单实现
- 适配器模式的简单使用
- 同步适配器模式(二)
- java适配器模式(二)
- 适配器模式(PHP实现)
- 简单介绍适配器模式
- 适配器模式 简单实例
- 设计模式学习(二)适配器模式
- 设计模式(二)适配器模式
- 戏说设计模式(二)适配器模式
- 设计模式学习(二)适配器模式
- 不兼容结构的协调——适配器模式(二):算法库适配器模式解决方案
- php实现适配器模式
- sine之舞
- 102. Binary Tree Level Order Traversal
- simhash算法原理及实现
- hdu 1007 Quoit Design
- html5游戏开发1 骰子游戏
- 适配器模式(二)-----简单的实现一个适配器模式
- 蓝桥杯大赛个人赛省赛(软件类) C/C++ 大学B组
- c++第一次实验-3
- I2C驱动小结---心得
- ext2文件系统之ext2_lookup函数源代码分析
- 互联网几种初级攻击
- Java中数据存放的位置
- C++ String类的实现
- ios8 UITableView设置 setSeparatorInset:UIEdgeInsetsZero不起作用的解决办法