一、适配器模式定义 

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

二、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. 01_C语言基础

    内容提要: 1. C语言概述2. 数据类型.运算符与表达式3. C语言程序结构 4. VC6.0使用练习 知识详解01:C语言的历史 1. C语言与其它语言比较 汇编语言: (1).可直接对硬件进行操 ...

  2. (四)跟我一起玩Linux网络服务:DHCP服务配置之中继代理

    继第三部分的DHCP服务器的设置成功,我们来做一个中继代理服务器的配置吧. 我们的虚拟机结构如图: 具体参考: (一)跟我一起玩Linux网络服务:DNS服务——BIND(/etc/named.con ...

  3. C#面向对象的学习笔记

    1.面向对象的3要素: 封装:将不需要显示的代码封装到一个方法中,只对外提供方法名,用户不需关心内部实现. 继承:子类继承父类,公用父类的代码,大大提高了代码的重用,贴近生活也符合人类的编程思想. 多 ...

  4. jQuery实现购物车多物品数量的加减+总价+删除计算

    <?php session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E ...

  5. thinkphp多表查询

    在学习thinkphp 的过程中,需要对多表进行操作,但是在实际过程中,总是遇到各种问题,所以写下这篇博文,作为自己的学习历程 在操作过程中,两表查询都没有问题,但是三表查询就开始出现问题 有以下三张 ...

  6. a标签拨打电话、发短信、发邮件

    1.<a href=”tel:xxxx”>拨打电话</a> 2.<a href=”sms:xxxx”>发短信</a> 3.<a href=”mai ...

  7. TDirectory.IsEmpty判断指定目录是否为空

    使用函数: System.IOUtils.TDirectory.IsEmpty class function IsEmpty(const Path: string): Boolean; static; ...

  8. POJ 3273 Monthly Expense 二分枚举

    题目:http://poj.org/problem?id=3273 二分枚举,据说是经典题,看了题解才做的,暂时还没有完全理解.. #include <stdio.h> #include ...

  9. 【高德地图API】如何解决坐标转换,坐标偏移?

    http://bbs.amap.com/thread-18617-1-1.html#rd?sukey=cbbc36a2500a2e6c2b0b19115118ace519002ff3a52731f13 ...

  10. adb logcat 查看日志

    使用 logcat 命令 查看和跟踪系统日志缓冲区的命令logcat的一般用法是: [adb] logcat [<option>] ... [<filter-spec>] .. ...