抽象工厂设计模式

Posted kaiseryin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽象工厂设计模式相关的知识,希望对你有一定的参考价值。

 1 class Frog:
 2     def __init__(self,name):
 3         self.name = name
 4 
 5     def __str__(self):
 6         return self.name
 7 
 8     def interact_with(self,obstacle):
 9         print(‘{} the frog encounters {} and {}‘.format(self,obstacle,obstacle.action()))
10 
11 class Bug():
12     def __str__(self):
13         return ‘a bug‘
14 
15     def action(self):
16         return ‘eats it‘
17 
18 class FrogWorld():
19     def __init__(self,name):
20         print(self)
21         self.player_name = name
22 
23     def __str__(self):
24         return ‘

	--------- frog world ---------25 
26     def make_character(self):
27         return Frog(self.player_name)
28 
29     def make_obstacle(self):
30         return Bug()
31 
32 class Wizard():
33     def __init__(self,name):
34         self.name = name
35     def __str__(self):
36         return self.name
37 
38     def interact_with(self,obstacle):
39         print(‘{} the Wizard battles against {} and {}!‘.format(self,obstacle,obstacle.action()))
40 
41 class Ork:
42     def __str__(self):
43         return ‘an evil ork‘
44     def action(self):
45         return ‘kill it‘
46 
47 class WizardWorld:
48     def __init__(self,name):
49         print(self)
50         self.player_name = name
51 
52     def __str__(self):
53         return ‘

	------- Wizard World -------54 
55     def make_character(self):
56         return Wizard(self.player_name)
57 
58     def make_obstacle(self):
59         return Ork()
60 
61 class GameEnvironment:
62     def __init__(self,factory):
63         self.hero = factory.make_character()
64         self.obstacle = factory.make_obstacle()
65 
66     def paly(self):
67          self.hero.interact_with(self.obstacle)
68 
69 def validate_age(name):
70     try:
71         age = input(‘welcome {} .how old are you? ‘.format(name))
72         age = int(age)
73     except ValueError as err:
74         print(‘Age {} is invalid, please try again .....‘.format(age))
75         return (False,age)
76     return (True,age)
77 
78 def main():
79     name = input("hello,what‘your name?")
80     valid_input = False
81     while not valid_input:
82         valid_input, age = validate_age(name)
83     game = FrogWorld if age < 18 else WizardWorld
84     environment = GameEnvironment(game(name))
85     environment.paly()
86 
87 if __name__ == ‘__main__‘:
88     main()

 

抽象工厂设计模式与工厂方法在形式上最大的区别在于抽象工厂会设计生成一个抽象类(实际上类似提供一个接口,对底层实现的具体类进行封装后隐藏,提供统一的使用方法)

以上是关于抽象工厂设计模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之工厂方法和抽象工厂

设计模式学习——简单工厂模式工厂模式抽象工厂模式

设计模式 创建者模式 工厂设计模式 -- 抽象工厂设计模式介绍和实现

设计模式:抽象工厂模式

设计模式11:抽象工厂模式

设计模式与代码的结构特性