python设计模式 -- Abstract Factory

目的

  • 提供一个用于创建相关或依赖对象族的接口,而无需指定其具体类。
  • 封装的层次结构:许多可能的“平台”,以及一组“产品”的构造(简单理解为多个工厂封装)。
  • 增加产品容易,增加方法复杂。

简单实现

http://ginstrom.com/scribbles/2007/10/08/design-patterns-python-style/

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


import random


class PetShop:

    """一个宠物店"""

    def __init__(self, animal_factory=None):
        """pet_factory 为位抽象工厂"""

        self.pet_factory = animal_factory

    def show_pet(self):
        """主要是为了展示实例化了哪个类"""

        pet = self.pet_factory()
        print("We have a lovely {}".format(pet))
        print("It says {}".format(pet.speak()))


class Dog:
    def speak(self):
        return "woof"

    def __str__(self):
        return "Dog"


class Cat:
    def speak(self):
        return "meow"

    def __str__(self):
        return "Cat"



# 随机创建
def random_animal():
    return random.choice([Dog, Cat])()


if __name__ == "__main__":

    # A Shop that sells only cats
    cat_shop = PetShop(Cat)
    cat_shop.show_pet()
    print("")

    # A shop that sells random animals
    shop = PetShop(random_animal)
    for i in range(3):
        shop.show_pet()
        print("=" * 20)



“世界就像是个巨大的马戏团,它让你兴奋,却让我惶恐,因为我知道散场后永远是有限温存,无限心酸。”——Charlie Chaplin