研磨设计模式解析及python代码实现——(三)适配器模式(Adapter)

一、适配器模式定义 

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

二、python 实现

  


  1 import string
2 import cPickle as p
3 import datetime
4 import os
5 class LogModel:
6 logId=""
7 operateUser=""
8 operateTime=""
9 logContent=""
10
11 def __init__(self,id,user,time,content):
12 self.logId=id
13 self.operateUser=user
14 self.operateTime=time
15 self.logContent=content
16
17 def setLogId(self,id):
18 self.logId=id
19 def setOperateUser(self,user):
20 self.operateUser=user
21 def setOperateTime(self,time):
22 self.operateTime=time
23 def setLogContent(self,content):
24 self.logContent=content
25 def getLogId(self):
26 return self.logId
27 def getOperateUser(self):
28 return self.operateUser
29 def getOperateTime(self):
30 return self.operateTime
31 def getLogContent(self):
32 return self.logContent
33 def toString(self):
34 return "logId=%s,operateUser=%s,operateTime=%s,logContent=%s" %(self.logId,self.operateUser,self.operateTime,self.logContent)
35
36 class LogFileOperateApi:
37 def readFile(self):
38 pass
39 def WriteLogFile(self,list):
40 pass
41 class LogFileOperate(LogFileOperateApi):
42 LogFilePath="AdapterLog.log"
43 def __init__(self,logFilePath):
44 if (logFilePath!=None)and(len(logFilePath.strip()) > 0):
45 self.LogFilePath=logFilePath
46 def readFile(self):
47 f = file(self.LogFilePath)#open(self.LogFilePath,‘r‘)
48 if os.stat(self.LogFilePath).st_size==0:
49 list=[]
50 else:
51 list=p.load(f)
52 f.close()
53 return list
54 def WriteLogFile(self,list):
55 f = open(self.LogFilePath, ‘w‘)
56 p.dump(list, f)
57 f.close()
58 class LogDbOperateApi:
59 def createLog(self,logModel):
60 pass
61 def updateLog(self,logModel):
62 pass
63 def removeLog(self,logModel):
64 pass
65 def getAllLog(self):
66 pass
67 class LogDbOperate(LogDbOperateApi):
68 def createLog(self,logModel):
69 print "Now LogDbOperate createLog , lm=%s" %(logModel)
70 def updateLog(self,logModel):
71 print "Now LogDbOperate updateLog , lm=%s" %(logModel)
72 def removeLog(self,logModel):
73 print "Now LogDbOperate removeLog , lm=%s" %(logModel)
74 def getAllLog(self):
75 print "Now in LogDbOperate getAllLog"
76 class TwoDirectAdapter(LogFileOperateApi,LogDbOperateApi):
77 fileLog=None
78 dbLog = None
79 def __init__(self,fileLog,dbLog):
80 self.fileLog=fileLog
81 self.dbLog=dbLog
82 def createLog(self,logModel):
83 list=self.fileLog.readFile()
84 list.append(logModel)
85 self.fileLog.WriteLogFile(list)
86 def updateLog(self,logModel):
87 list=self.fileLog.readFile()
88 for item in list:
89 if item.getLogId()==logModel.getLogId():
90 item=logModel
91 break
92 self.fileLog.WriteLogFile(list)
93 def removeLog(self,logModel):
94 list=self.fileLog.readFile()
95 for item in list:
96 if item.getLogId()==logModel.getLogId():
97 del item
98 break
99 self.fileLog.WriteLogFile(list)
100 def getAllLog(self):
101 return self.fileLog.readFile()
102 def readFile(self):
103 return self.dbLog.getAllLog()
104 def WriteLogFile(self,list):
105 for item in list:
106 self.dbLog.createLog(item)
107 #main function
108 LogFilePath="AdapterLog.log"
109 f=open(LogFilePath,‘w+‘)
110 f.truncate()
111 lml=LogModel("001","admin",datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),"This is a test!").toString()
112 list=[]
113 list.append(lml)
114
115 file_api= LogFileOperate("")
116 db_api= LogDbOperate()
117 file_api2=TwoDirectAdapter(file_api,db_api)
118 db_api2=TwoDirectAdapter(file_api,db_api)
119 db_api2.createLog(lml)
120
121 allLog=db_api2.getAllLog()
122 print "allLog:",
123 print allLog
124 file_api2.WriteLogFile(list)
125 file_api2.readFile()

研磨设计模式解析及python代码实现——(三)适配器模式(Adapter),布布扣,bubuko.com

时间: 2024-08-24 05:13:34

研磨设计模式解析及python代码实现——(三)适配器模式(Adapter)的相关文章

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

最近在学设计模式,正巧书之前学了些python,但用的还不是很成熟.<研磨设计模式>书上只给了java代码,本着以练手为目标,我照着书上打了一遍java代码,在仔细体会其思想后,将其写成了python的代码.有不对的地方希望各位批评指正~ 具体原理不多做介绍,具体可以参考http://chjavach.iteye.com的博客,或者<研磨设计模式>的书. 一.背景介绍 接口思想: 众所周知,面向对象语言最大的特点便是封装,继承,多态这三个概念.而像Java等面向对象语言最核心的思想

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

一.外观模式定义 为子系统中的一组接口提供一个一致的界面,使得此子系统更加容易使用. 二.书中python代码实现 1 class AModuleApi: 2 def testA(self): 3 pass 4 class AModuleImpl(AModuleApi): 5 def testA(self): 6 print "Now Call testA in AModule!" 7 class BModuleApi: 8 def testB(self): 9 pass 10 cla

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

所谓学习问题,是指观察由n个样本组成的集合,并依据这些数据来预測未知数据的性质. 学习任务(一个二分类问题): 区分一个普通的互联网检索Query是否具有某个垂直领域的意图.如果如今有一个O2O领域的垂直搜索引擎,专门为用户提供团购.优惠券的检索:同一时候存在一个通用的搜索引擎,比方百度,通用搜索引擎希望可以识别出一个Query是否具有O2O检索意图,如果有则调用O2O垂直搜索引擎,获取结果作为通用搜索引擎的结果补充. 我们的目的是学习出一个分类器(classifier),分类器能够理解为一个函

几行Python代码快速解析、整理上万份数据文件

在这个世界上,人们每天都在用 Python 完成着不同的工作.而文件操作,则是大家最常需要解决的任务之一.使用 Python,你可以轻松为他人生成精美的报表,也可以用短短几行代码快速解析.整理上万份数据文件. 当我们编写与文件相关的代码时,通常会关注这些事情:我的代码是不是足够快?我的代码有没有事半功倍的完成任务? 在这篇文章中,我会与你分享与之相关的几个编程建议.我会向你推荐一个被低估的 Python 标准库模块.演示一个读取大文件的最佳方式.最后再分享我对函数设计的一点思考. 下面,让我们进

常见设计模式 (python代码实现)

1.创建型模式 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. 比如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个 AppConfig 的类来读取配置文件的信息.如果在程序运行期间,有很多地方都需要使用配置文件的内容,也就是说,很多地方都需要创建 AppConfig 对象的实例,这就导致系统中存在多个 AppConfig 的实例对象

Python代码样例列表

├─algorithm│       Python用户推荐系统曼哈顿算法实现.py│      NFA引擎,Python正则测试工具应用示例.py│      Python datetime计时程序的实现方法.py│      python du熊学斐波那契实现.py│      python lambda实现求素数的简短代码.py│      Python localtime()方法计算今天是一年中第几周.py│      Python math方法算24点代码详解.py│      Pyth

Retrofit源码设计模式解析(下)

本文将接着<Retrofit源码设计模式解析(上)>,继续分享以下设计模式在Retrofit中的应用: 适配器模式 策略模式 观察者模式 单例模式 原型模式 享元模式 一.适配器模式 在上篇说明CallAdapter.Factory使用工厂模式时,提到CallAdapter本身采用了适配器模式.适配器模式将一个接口转换成客户端希望的另一个接口,使接口本不兼容的类可以一起工作. Call接口是Retrofit内置的发送请求给服务器并且返回响应体的调用接口,包括同步.异步请求,查询.取消.复制等功

[转] Python 代码性能优化技巧

选择了脚本语言就要忍受其速度,这句话在某种程度上说明了 python 作为脚本的一个不足之处,那就是执行效率和性能不够理想,特别是在 performance 较差的机器上,因此有必要进行一定的代码优化来提高程序的执行效率.如何进行 Python 性能优化,是本文探讨的主要问题.本文会涉及常见的代码优化方法,性能优化工具的使用以及如何诊断代码的性能瓶颈等内容,希望可以给 Python 开发人员一定的参考. Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下

无需操作系统和虚拟机,直接运行Python代码

Josh Triplett以一个“笑点”开始了他在PyCon 2015上的演讲:移植Python使其无需操作系统运行:他和他的英特尔同事让解释器能够在GRUB引导程序.BIOS或EFI系统上运行.连演讲的休息时间也没放过,他有很多有趣的要说的事情,还有许多让人大开眼界的演示. Python在Boot Loader上运行的最初想法是能够测试硬件,像BIOS,可扩展固件接口(EFI)以及高级配置和电源接口(ACPI),而无需去写一些“一次性测试项目“程序集.传统来说,英特尔已经写了很多针对DOS(B