一、适配器模式定义 

  将一个类的接口转换成另外一个接口,适配器模式使得原本由于接口不兼容,而不能在一起工作的哪些类能够在一起工作。

二、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)的更多相关文章

  1. 研磨设计模式解析及python代码实现——(一)简单工厂模式

    最近在学设计模式,正巧书之前学了些python,但用的还不是很成熟.<研磨设计模式>书上只给了java代码,本着以练手为目标,我照着书上打了一遍java代码,在仔细体会其思想后,将其写成了 ...

  2. 研磨设计模式解析及python代码实现——(二)外观模式(Facade)

    一.外观模式定义 为子系统中的一组接口提供一个一致的界面,使得此子系统更加容易使用. 二.书中python代码实现 class AModuleApi: def testA(self): pass cl ...

  3. 机器学习完整过程案例分布解析,python代码解析

    所谓学习问题,是指观察由n个样本组成的集合,并依据这些数据来预測未知数据的性质. 学习任务(一个二分类问题): 区分一个普通的互联网检索Query是否具有某个垂直领域的意图.如果如今有一个O2O领域的 ...

  4. 进程、线程、协程的基本解析(python代码)

    进程什么是进程?程序就是一堆放在磁盘上的代码,进程是一段程序的运行过程正规点说,进程一般由程序.数据集.进程控制块三部分组成 什么进程切换?进程切换是,一个正在运行的进程被中断,操作系统指定另一个进程 ...

  5. 设计模式(七): 通过转接头来观察"适配器模式"(Adapter Pattern)

    在前面一篇博客中介绍了“命令模式”(Command Pattern),今天博客的主题是“适配器模式”(Adapter Pattern).适配器模式用处还是比较多的,如果你对“适配器模式”理解呢,那么自 ...

  6. 【编程思想】【设计模式】【结构模式Structural】适配器模式adapter

    Python版 https://github.com/faif/python-patterns/blob/master/structural/adapter.py #!/usr/bin/env pyt ...

  7. 理解了这三点,才敢说自己会写Python代码

    某同学应聘Python岗位被录用.上班第一天,Leader吩咐他写一个获取次日日期信息的函数.该同学信心满满地写下了这样一段代码, 然后就没有然后了. import time def get_next ...

  8. python设计模式之装饰器详解(三)

    python的装饰器使用是python语言一个非常重要的部分,装饰器是程序设计模式中装饰模式的具体化,python提供了特殊的语法糖可以非常方便的实现装饰模式. 系列文章 python设计模式之单例模 ...

  9. python 解析XML python模块xml.dom解析xml实例代码

    分享下python中使用模块xml.dom解析xml文件的实例代码,学习下python解析xml文件的方法. 原文转自:http://www.jbxue.com/article/16587.html ...

随机推荐

  1. gitlab的安装以及汉化

    gitlab的安装 首先在网上下载好任意版本gitlab的rpm包 推荐下面的地址: https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gi ...

  2. Unix环境高级编程学习笔记——dup

    dup 和 dup2   dup和dup2,都是用来将一个文件描述符复制给另一个文件描述符上,这两个文件描述符都指向同一个文件状态标志上. 只是文件描述符的大小不一样,dup所执行下的复制,肯定是返回 ...

  3. BufferedReader、FileReader、FileInputStream的区别

    一.BufferReader BufferedReader   由Reader类扩展而来,提供通用的缓冲方式文本读取,而且提供了很实用的readLine,读取分行文本很适合,BufferedReade ...

  4. js点击 密码输入框密码显示隐藏

    很多密码框都有个眼睛标记,点击能显示密码.原理就是点击切换password为text等显示 下面上代码 <!DOCTYPE html> <html> <head> ...

  5. simplexml 使用实例

    搞了几天php处理xml文件,终于有点头绪,记录下来分享一下.simplexml 是php处理xml文件的一个方法,另一个是dom处理,这里只说simplexml.目前php处理xml用的比较多,比较 ...

  6. TDirectory.GetDirectoryRoot获取指定目录的根目录

    使用函数: System.IOUtils.TDirectory.GetDirectoryRoot 函数定义: class function GetDirectoryRoot(const Path: s ...

  7. 摩尔斯电码(Morse Code)Csharp实现

    摩尔斯电码,在早期的"生产斗争"生活中,扮演了很重要的角色,作为一种信息编码标准,摩尔斯电码拥有其他编码方案无法超越的长久生命.摩尔斯电码在海事通讯中被作为国际标准一直使用到199 ...

  8. C++ 类族的设计

     - 类族的设计]    按以下的提示,由基类的设计和测试开始,逐渐地完成各个类的设计,求出圆格柱体的表面积.体积并输出并且完成要求的计算任务:    (1)先建立一个Point(点)类,包含数据成员 ...

  9. [问题]编译报错:clang: error: linker command failed with exit code 1及duplicate symbol xxxx in错误解决方法之一

    今天添加了一个新类(包括m,h,xib文件),还没有调用,-编译遇到如下错误,根据错误提示, duplicate symbol param1 in: /Users/xxxx/Library/Devel ...

  10. delphi xe5 android 开发实现手机打电话和发短信

    转载自  http://www.raysoftware.cn/ 其实都可以通过intent和URI调用系统功能.Windows程序员可以理解成是ShellExecute.这个是万金油.可以有调用各种功 ...