研磨设计模式解析及python代码实现——(三)适配器模式(Adapter)
一、适配器模式定义
将一个类的接口转换成另外一个接口,适配器模式使得原本由于接口不兼容,而不能在一起工作的哪些类能够在一起工作。
二、python 实现
import string
import cPickle as p
import datetime
import os
class LogModel:
logId=""
operateUser=""
operateTime=""
logContent="" def __init__(self,id,user,time,content):
self.logId=id
self.operateUser=user
self.operateTime=time
self.logContent=content def setLogId(self,id):
self.logId=id
def setOperateUser(self,user):
self.operateUser=user
def setOperateTime(self,time):
self.operateTime=time
def setLogContent(self,content):
self.logContent=content
def getLogId(self):
return self.logId
def getOperateUser(self):
return self.operateUser
def getOperateTime(self):
return self.operateTime
def getLogContent(self):
return self.logContent
def toString(self):
return "logId=%s,operateUser=%s,operateTime=%s,logContent=%s" %(self.logId,self.operateUser,self.operateTime,self.logContent) class LogFileOperateApi:
def readFile(self):
pass
def WriteLogFile(self,list):
pass
class LogFileOperate(LogFileOperateApi):
LogFilePath="AdapterLog.log"
def __init__(self,logFilePath):
if (logFilePath!=None)and(len(logFilePath.strip()) > 0):
self.LogFilePath=logFilePath
def readFile(self):
f = file(self.LogFilePath)#open(self.LogFilePath,'r')
if os.stat(self.LogFilePath).st_size==0:
list=[]
else:
list=p.load(f)
f.close()
return list
def WriteLogFile(self,list):
f = open(self.LogFilePath, 'w')
p.dump(list, f)
f.close()
class LogDbOperateApi:
def createLog(self,logModel):
pass
def updateLog(self,logModel):
pass
def removeLog(self,logModel):
pass
def getAllLog(self):
pass
class LogDbOperate(LogDbOperateApi):
def createLog(self,logModel):
print "Now LogDbOperate createLog , lm=%s" %(logModel)
def updateLog(self,logModel):
print "Now LogDbOperate updateLog , lm=%s" %(logModel)
def removeLog(self,logModel):
print "Now LogDbOperate removeLog , lm=%s" %(logModel)
def getAllLog(self):
print "Now in LogDbOperate getAllLog"
class TwoDirectAdapter(LogFileOperateApi,LogDbOperateApi):
fileLog=None
dbLog = None
def __init__(self,fileLog,dbLog):
self.fileLog=fileLog
self.dbLog=dbLog
def createLog(self,logModel):
list=self.fileLog.readFile()
list.append(logModel)
self.fileLog.WriteLogFile(list)
def updateLog(self,logModel):
list=self.fileLog.readFile()
for item in list:
if item.getLogId()==logModel.getLogId():
item=logModel
break
self.fileLog.WriteLogFile(list)
def removeLog(self,logModel):
list=self.fileLog.readFile()
for item in list:
if item.getLogId()==logModel.getLogId():
del item
break
self.fileLog.WriteLogFile(list)
def getAllLog(self):
return self.fileLog.readFile()
def readFile(self):
return self.dbLog.getAllLog()
def WriteLogFile(self,list):
for item in list:
self.dbLog.createLog(item)
#main function
LogFilePath="AdapterLog.log"
f=open(LogFilePath,'w+')
f.truncate()
lml=LogModel("","admin",datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),"This is a test!").toString()
list=[]
list.append(lml) file_api= LogFileOperate("")
db_api= LogDbOperate()
file_api2=TwoDirectAdapter(file_api,db_api)
db_api2=TwoDirectAdapter(file_api,db_api)
db_api2.createLog(lml) allLog=db_api2.getAllLog()
print "allLog:",
print allLog
file_api2.WriteLogFile(list)
file_api2.readFile()
研磨设计模式解析及python代码实现——(三)适配器模式(Adapter)的更多相关文章
- 研磨设计模式解析及python代码实现——(一)简单工厂模式
最近在学设计模式,正巧书之前学了些python,但用的还不是很成熟.<研磨设计模式>书上只给了java代码,本着以练手为目标,我照着书上打了一遍java代码,在仔细体会其思想后,将其写成了 ...
- 研磨设计模式解析及python代码实现——(二)外观模式(Facade)
一.外观模式定义 为子系统中的一组接口提供一个一致的界面,使得此子系统更加容易使用. 二.书中python代码实现 class AModuleApi: def testA(self): pass cl ...
- 机器学习完整过程案例分布解析,python代码解析
所谓学习问题,是指观察由n个样本组成的集合,并依据这些数据来预測未知数据的性质. 学习任务(一个二分类问题): 区分一个普通的互联网检索Query是否具有某个垂直领域的意图.如果如今有一个O2O领域的 ...
- 进程、线程、协程的基本解析(python代码)
进程什么是进程?程序就是一堆放在磁盘上的代码,进程是一段程序的运行过程正规点说,进程一般由程序.数据集.进程控制块三部分组成 什么进程切换?进程切换是,一个正在运行的进程被中断,操作系统指定另一个进程 ...
- 设计模式(七): 通过转接头来观察"适配器模式"(Adapter Pattern)
在前面一篇博客中介绍了“命令模式”(Command Pattern),今天博客的主题是“适配器模式”(Adapter Pattern).适配器模式用处还是比较多的,如果你对“适配器模式”理解呢,那么自 ...
- 【编程思想】【设计模式】【结构模式Structural】适配器模式adapter
Python版 https://github.com/faif/python-patterns/blob/master/structural/adapter.py #!/usr/bin/env pyt ...
- 理解了这三点,才敢说自己会写Python代码
某同学应聘Python岗位被录用.上班第一天,Leader吩咐他写一个获取次日日期信息的函数.该同学信心满满地写下了这样一段代码, 然后就没有然后了. import time def get_next ...
- python设计模式之装饰器详解(三)
python的装饰器使用是python语言一个非常重要的部分,装饰器是程序设计模式中装饰模式的具体化,python提供了特殊的语法糖可以非常方便的实现装饰模式. 系列文章 python设计模式之单例模 ...
- python 解析XML python模块xml.dom解析xml实例代码
分享下python中使用模块xml.dom解析xml文件的实例代码,学习下python解析xml文件的方法. 原文转自:http://www.jbxue.com/article/16587.html ...
随机推荐
- Google Map 自定义 infowindow
最近做的东西用到了infowindow,不过google提供的样式太难看了,于是想改变一下样式.看了一下好像infowindow的样式不太好改. 查了半天资料,看到一个infobox,感觉真的挺好用. ...
- POJ 2442 Sequence 优先队列
题目: http://poj.org/problem?id=2442 #include <stdio.h> #include <string.h> #include <q ...
- 将yyyyMMdd HH:mm:ss格式的时间转换成时间类型
DateTime.ParseExact(gmt_withdrawal, "yyyyMMddHHmmss", System.Globalization.CultureInfo.Cur ...
- Areas(区域)
Areas(区域) 原文:Areas作者:Dhananjay Kumar 和 Rick Anderson翻译:耿晓亮(Blue)校对:许登洋(Seay) Areas 是 ASP.NET MVC 用来将 ...
- iOS开发之iOS程序偏好设置(Settings Bundle)的使用
目录[-] 1.添加设置项 2.设置的控件 3.编辑设置项的文件 4.在程序中获取Settings 和写入Settings 添加UI 5.实现读取设置和保存代码 在Android手机上, 在某个程序里 ...
- 8月1日起,这些新政将影响移动互联网产业-b
今天,国家互联网信息办公室发布<移动互联网应用程序信息服务管理规定>.这项规定将从8月1日起生效,其中侧重对两类玩家提出了监管意见,他们分别是: 移动互联网应用程序提供者,即提供信息服务的 ...
- 根据WSDL生成代理类方式(2)
运行开发人员工具提示 输入命令行svcutil http://localhost:8080/Test/TestClassPort?wsdl
- Java多线程初学者指南(9):为什么要进行数据同步
Java中的变量分为两类:局部变量和类变量.局部变量是指在方法内定义的变量,如在run方法中定义的变量.对于这些变量来说,并不存在线程之间共享的问题.因此,它们不需要进行数据同步.类变量是在类中定义的 ...
- vc6静态库的生成和调用
转自vc6静态库的生成和调用 1.静态库的生成: 在vc6.0++中Ctrl+N选择Projects下的Win32 Static Library,Project name:SumLib,点击OK,下一 ...
- Mongodb使用
Mongodb基本的原则是:条件句是内层文档的键,修改器是外层文档的键[即,修改器要修改的字段声明在修改器内部].1.$size,用于查询数组大小为size的记录db.a.find({"co ...