码迷,mamicode.com
首页 > 其他好文 > 详细

工厂方法模式

时间:2018-02-04 22:50:59      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:nbsp   模式   opp   except   __name__   mode   cto   not   parse   

 

 

import xml.etree.ElementTree as etree
import json


class JSONConnector:

    def __init__(self, filepath):
        self.data = dict()
        with open(filepath, mode=‘r‘, encoding=‘utf-8‘) as f:
            self.data = json.load(f)

    @property
    def parsed_data(self):
        return self.data


class XMLConnector:

    def __init__(self, filepath):
        self.tree = etree.parse(filepath)

    @property
    def parsed_data(self):
        return self.tree


def connection_factory(filepath):
    if filepath.endswith(‘json‘):
        connector = JSONConnector
    elif filepath.endswith(‘xml‘):
        connector = XMLConnector
    else:
        raise ValueError(‘Cannot connect to {}‘.format(filepath))
    return connector(filepath)


def connect_to(filepath):
    factory = None
    try:
        factory = connection_factory(filepath)
    except ValueError as ve:
        print(ve)
    return factory


def main():
    sqlite_factory = connect_to(‘data/person.sq3‘)
    print()

    xml_factory = connect_to(‘data/person.xml‘)
    xml_data = xml_factory.parsed_data
    liars = xml_data.findall(".//{}[{}=‘{}‘]".format(‘person‘,
                                                     ‘lastName‘, ‘Liar‘))
    print(‘found: {} persons‘.format(len(liars)))
    for liar in liars:
        print(‘first name: {}‘.format(liar.find(‘firstName‘).text))
        print(‘last name: {}‘.format(liar.find(‘lastName‘).text))
        [print(‘phone number ({})‘.format(p.attrib[‘type‘]),
               p.text) for p in liar.find(‘phoneNumbers‘)]

    print()

    json_factory = connect_to(‘data/donut.json‘)
    json_data = json_factory.parsed_data
    print(‘found: {} donuts‘.format(len(json_data)))
    for donut in json_data:
        print(‘name: {}‘.format(donut[‘name‘]))
        print(‘price: ${}‘.format(donut[‘ppu‘]))
        [print(‘topping: {} {}‘.format(t[‘id‘], t[‘type‘])) for t in donut[‘topping‘]]

if __name__ == ‘__main__‘:
    main()

  

工厂方法模式

标签:nbsp   模式   opp   except   __name__   mode   cto   not   parse   

原文地址:https://www.cnblogs.com/andy9468/p/8414328.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!