设计模式vsPythonic~数据转换

题面儿

关于“设计模式”的一个问题 - python-cn`CPyUG`华蟒用户组 | Google 网上论坛

victor <[email protected]> 
reply-to        [email protected]
to      python-cn`CPyUG`华蟒用户组 <[email protected]>
date    Wed, Sep 17, 2008 at 13:24
subject [CPyUG:65860] 关于“设计模式”的一个问题

俺在项目里面要用到一个软件结构,不知道用什么模式设计比较好些。:) 当初设计模式也学的不是很深,只好求助于各位大侠。

软件的大体功能是这样的:

有多种格式的数据要convert 到另外多种格式:

Fmt1  conv_mid                    conv_dest    Fmt1
Fmt2  --------------->   mid_fmt  ----------------> Fmt2
Fmt3                                                      Fmt3
...                                                          ...

下面是我的思路:

我设计了两个converter类,类里面分别有一个函数:

class SrcConv:
   def cnvt(self, src_data, mid_data):...
class MidConv:
   def cnvt(self, mid_data, des_data):...

在cnvt这个函数里面肯定不能用
if src_data.fmt is Fmt1:...
elif src_data.fmt is Fmt2:...
...
if des_data.fmt is Fmt1:...
elif des_data.fmt is Fmt2:...
...

这种多重判断的结构,太不OO了,所以我想肯定有一种设计模式跟这种情况是对应的, 我是想用factory pattern来实现。

  • (1)把两个converter类变成虚基类,继承类每种conveter都有自己的实现,

这样每次new 一个converter,然后调用他的cnvt函数就可以了。

ConvDestCreater继承这个基类,基类是这样定义的:

class ConverterCreater:
   def creatConverter(self,format):
   def convert(self,format,src,dest):
        converter = self.creatConverter(format)
        converter.cnvt(src,dest)

这样,如果有新的format增加,只要改两个ConverterCreater的继承类的creatConverter函数 再增加converter类就可以了。

不知道这样设计是不是好,感觉有点生搬硬套"factory 模式",不知道有没有更好的设计, 或是有什么好的改进方法。。。

字典式~Limodou

limodou <[email protected]>
reply-to        [email protected]
to      [email protected]
date    Wed, Sep 17, 2008 at 14:14
subject [CPyUG:65882] Re: 关于“设计模式”的一个问题

2008/9/17 victor <[email protected]>: > > 如果一个function里面有并列十多个if elif,每个if 下面有几百行代码,那是不是就会让看代码的人 > 很痛苦呢? >

source = {'Fmt1':Fmt1class, 'Fmt2':Fmt2class, ...}
des = {'Fmt1':Fmt1class, 'Fmt2':Fmt2class, ...}

def convert(s, d):
   mid = source[s.fmt].convert()
   return mid.convert_to(d.fmt)

示例代码。没有出错判断。

源头~Zoomq

编码对应式~黄毅

黄毅 <[email protected]>
reply-to        [email protected]
to      [email protected]
date    Thu, Sep 18, 2008 at 00:25
subject [CPyUG:65953] Re: 关于“设计模式”的一个问题

考虑 字符串 和 unicode 之间的这种关系

   1 def encode_fmt1(midi_fmt_data):
   2     return fmt1_data
   3 
   4 def decode_fmt1(fmt1_data):
   5     return midi_fmt_data
   6 
   7 #...
   8 
   9 encoders = {
  10     fmt1: encode_fmt1,
  11     #...
  12 }
  13 
  14 decoders = {
  15     fmt1: decode_fmt1,
  16     #...
  17 }
  18 
  19 def transform(data, fmt_from, fmt_to):
  20      encoder = encoders[fmt_from]
  21      decoder = decoders[fmt_to]
  22      return encoder(decoder(data))


反馈

创建 by -- ZoomQuiet [2008-09-17 23:40:17]

Name Password4deL ;) :( X-( B-)
acheter kamagra   hktipter piyvdrfd fwhuippi
2009-08-09 21:00:51
acheter viagra   hzgifohp enwxdmip jjgjorrp
2009-08-09 22:26:13
achat viagra   gybscozz bohcuazp xuqtlnbp
2009-08-09 23:52:11
acheter Levitra   sojeidhd zylxbxlx lczvcuno
2009-08-10 01:15:38
acheter kamagra   yvycikgl yolmsarc stgzgfmv
2009-08-10 02:39:16
viagra   xuxpcxbt ltypbhny uvosvleu
2009-08-14 15:10:52
cialis acheter   oeygaiuy okuuyplo phgvfkpt
2009-08-14 16:35:08
achat viagra   gvglonvg txjhoctb whfpgfdx
2009-08-14 17:59:06
viagra prix   amkieema mralqzdv qshwjrai
2009-08-14 19:22:10
vente cialis   pxgmtnfl zddsiuqb jqjqtfry
2009-08-14 20:49:21
viagra   spnqpweq wsotieby zzmmodeu
2009-08-14 22:16:42
cialis acheter   gtjpdapd boodfett cyyaigae
2009-08-14 23:43:32
cialis   wjihnrur pakwtshd fpoxjmah
2009-08-15 01:09:48
viagra sur le net   rzblslhx pfmxmxfq hjlrbxgo
2009-08-15 02:34:10
cialis   siudrpvh ihixtlmp cruibfxp
2009-08-15 03:58:21
viagra   gfcxvzap fbntyejo elggyowd
2009-08-18 11:58:27
viagra ohne rezept   fovuafrb itpilvqi mplqqoxv
2009-08-18 13:37:46
cialis preise   qiwfswea cvaxsqdx bmgrlfrj
2009-08-18 16:57:55
achat de viagra en f   ulvhrtzf hozinshj iwgpsmyx
2009-08-19 11:14:59
cialis generique   dvmkzpmu mjwqhxql qnidhvwr
2009-08-19 16:02:44
acquisto cialis   mougzoxb djsujpsx igqdvich
2009-08-21 07:25:32
viagra online   ksjmsrvk bcdrrsif xukrwgua
2009-08-21 13:24:41
viagra online   fsuqxuka gsauytes gubgbaua
2009-08-21 19:20:57
comprare cialis senz   lvswccsj epnodkio smnxihih
2009-08-22 01:19:18
compra viagra generi   iwpjubpr emmwvvxr mivtzyug
2009-08-22 05:45:26
cialis vendita   xswqwvfq pzpqewat onvasxrr
2009-08-22 11:44:52
cialis   sohzdndj jkfngcff wsmxfbzb
2009-08-23 00:15:07
acheter cialis moins   sbhaxlpg munrvurm hfgyngyt
2009-08-23 02:02:28
achat viagra france   seuugfct mzebpaug dwjszgsy
2009-08-23 03:46:20
cialis   cudmougb sotuezos gprcinyr
2009-08-29 03:41:59
achat viagra en fran   bryvkaqy kqienzqc ezbwuarb
2009-08-29 05:21:46
comprare viagra gene   itljtiyv qxtlajkn cckgpxqf
2009-08-29 06:58:26
acheter cialis franc   irofkejy sprvfkpd wxhrqsld
2009-08-29 08:37:25
acquisto cialis senz   lwapvfpq zhxwivac iyryrrqs
2009-08-29 10:18:10
comprare viagra su i   naulxdgb oivdvarq vrswbfus
2009-08-29 11:58:42
cialis online   oytwaybr bacivuin aouljidw
2009-08-29 13:36:09
viagra generique   katgpzql unrhfycu cczyipsa
2009-08-29 15:12:49
viagra   ratxvoah bthkllwq lysjpuat
2009-08-29 16:51:57
achat cialis france   zisojgyz qrzyynov guqtlnzt
2009-08-29 18:30:00

PageCommentData