工厂模式

  工厂模式是通过调用一个简单的函数就可以创建不同的对象,下面就简单讲讲工厂方法和抽象工厂模式

 

工厂方法

  工厂方法模式是指定义一个可以根据参数值的不同,而返回不同对象的函数

  案例:我们知道session是保存在服务端的,可以保存在缓存里,数据库...  在不同地方就有不同的保存方式,所以要实例不同session对象

1
2
3
4
5
6
7
8
9
10
11
12
13
class SessionFactory:
  
    @staticmethod
    def get_session_obj(handler):
        obj = None
  
        if config.SESSION_TYPE == "cache":
            obj = CacheSession(handler)
        elif config.SESSION_TYPE == "memcached":
            obj = MemcachedSession(handler)
        elif config.SESSION_TYPE == "redis":
            obj = RedisSession(handler)
        return obj

   在上面个例子中修改起来也很方便,只要在配置文件里修改即可

 

抽象工厂

  一系列的工厂方法组合在一起实现一个抽象工厂

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
class JSONParser:
    def parse(self, raw_data):
        return json.loads(raw_data)
 
 
class XMLParser:
    def parse(self, raw_data):
        return xml2dict(raw_data)
 
 
def new_parser(type, **kwargs):
    if type == 'json':
        return JSONParser()
    elif type == 'xml':
        return XMLParser()
 
 
parser = new_parser('json')
with open('hello.json') as fp:
    data = parser.parse(fp.read())
print(data)
 
 
 
class DBSaver:
    def save(self, obj, **kwargs):
        model = Model(**obj)
        model.save()
 
 
class FileSaver:
    def __init__(self, save_dir):
        self.save_dir = save_dir
 
    def save(self, obj, name):
        path = os.path.join(self.save_dir, name)
        with open(path, 'wb') as fp:
            data = json.dumps(obj)
            fp.write(data)
 
 
def new_saver(type, **kwargs):
    if type == 'db':
        return DBSaver()
    elif type == 'file':
        save_dir = kwargs['save_dir']
        return FileSaver(save_dir)
 
 
class FileHandler:
    def __init__(self, parse_type, save_type, **kwargs):
        self.parser = new_parser(parse_type, **kwargs)
        self.saver = new_saver(save_type, **kwargs)
 
    def do(self, data, filename):
        obj = self.parser.parse(data)
        self.saver.save(obj, filename)
 
handler = FileHandler('json', 'file', save_dir='save')
with open('hello.json') as fp:
    data = fp.read()
handler.do(data, 'data.json')

   由于抽象工厂是一系列的工厂方法组合在一起,所以在编程过程时,先工厂方法再抽象工厂

 



如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
posted @   财经知识狂魔  阅读(212)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示