研磨设计模式解析及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 ...
随机推荐
- 【实习记】2014-09-24万事达卡bin查询项目总结
8月28号,接到这个问题:现有前缀查询速度较慢,改进此知值求区间问题. 一开始没想到用二分法,更没有想到这个项目用了一个月,这一个月里,我学习并使用了middle框架写出了server ...
- nginx Engine X静态网页服务器介绍
Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. 反向代理(Reverse Proxy)方 ...
- mysql添加超级管理员
mysql>create user 'myroot'@'localhost' identified by 'myroot'; mysql>grant all privileges on * ...
- Castle ActiveRecord配置中需要注意的地方
关于Castle 的开发可参考李会军老师的Castle 开发系列文章,里面有关于ActiveRecord学习实践系列和Castle IOC容器系列两个部分,是比较好的教程. 这里主要说明在Castle ...
- 自己实现的库函数2(memset,memcmp,memcpy,memmove)
memset,memcmp,memcpy,memmove是对内存进行管理的库函数,为了更好的理解和使用这几个函数,自己用C语言实现一下~ //内存设置函数void* my_memset(void* d ...
- python 输出小数控制
一.要求较小的精度 将精度高的浮点数转换成精度低的浮点数. 1.round()内置方法round()不是简单的四舍五入的处理方式. >>> round(2.5) 2 >> ...
- statusBar显示白色字体
设置状态栏显示颜色为白色. a. 在info.plist中,添加一项,选择View controller-based status bar appearance(箭头下拉中最后一项),设置为no; b ...
- Java按正则提取字符串
在Java开发中,有时会遇到一些比较别扭的规则从字符串中提取子字符串,规则无疑是写正则表达式来表达了,那按照正则来提取子字符串就会用到java.util.regex包. java.util.regex ...
- 重燃你的PHP安全分析之火
关于脚本安全这个话题好像永远没完没了,如果你经常到国外的各种各样的bugtraq上,你会发现有一半以上都和脚本相关,诸如SQL injection,XSS,Path Disclosure,Remote ...
- Server-Side Access Control
Firefox 3.5 implements the W3C Access Control specification. As a result, Firefox 3.5 sends specifi ...