研磨设计模式解析及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 ...
随机推荐
- 【转】主从同步出现一下错误:Slave_IO_Running: Connecting
主从同步出现一下错误: Slave_IO_Running: ConnectingSlave_SQL_Running: Yes 解决方法: 导致lave_IO_Running 为connecting 的 ...
- compass sprite
1.compass init 初始化一个compass项目,并创建一个images文件夹用来存放合成的sprite图 2.将切好的小图放到images文件夹中 3.在sass文件夹中新建一个test. ...
- 微信分享功能引入页面-控制分享时候调用的标题、图片、url和微信按钮隐藏显示控制
1.设置分享调用的标题.图片.url预览. 2.控制右上角三个点按钮的隐藏显示(和底部工具栏的显示隐藏--未测试). 3.判断网页是否在微信中被调用. <!doctype html> &l ...
- Common Configration实验
用了一个CombinedConfigration 来做属性文件的继承(套用)发现它是以先添加的ConfigureRation作为最终输出也就是如果要实现我们项目中的效果 需要从内层目录向外层目录逐 ...
- Omnithreadlibary学习(3)-IOmniTask异步执行SendMessage
在任务中发送消息, 可以是函数或者对象方法 TOmniTaskMessageEvent = procedure(const task: IOmniTaskControl; const msg: TOm ...
- python 循环while和for in
#!/uer/bin/env python # _*_ coding: utf-8 _*_ lucknumber = 5 b = 0 while b <3: print('guss count: ...
- 第一个CUDA程序
开始学CUDA 先写一个简单的 #include<iostream>__global__ void add( int a, int b, int *c ) { *c = a + b;}in ...
- 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取”产品付费数量等于0的问题”】
转的别人的 看到很多童鞋问到,为什么每次都返回数量等于0?? 其实有童鞋已经找到原因了,原因是你在 ItunesConnect 里的 “Contracts, Tax, and Banking”没有完成 ...
- Gartner 如何看 RASP 和 WAF?
在这个计算机网络飞速发展的网络时代里,新兴的网络威胁正在不断「侵蚀」着的应用程序和核心数据的安全,各种繁杂的防护手段也随之接踵而来.众所周知,Gartner 是全球最具权威的 IT 研究与顾问咨询公司 ...
- 移动应用产品开发-android开发(一)
最近公司希望增添移动开发业务,进行移动互联网开发的调研及产品需求调研. 我主要负责技术解决方案的研究,从android开发开始学习.同时跟经理一起与其他部门同事沟通了解移动开发方面的需求. 在了解an ...