抽象工厂设计模式
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()
抽象工厂设计模式与工厂方法在形式上最大的区别在于抽象工厂会设计生成一个抽象类(实际上类似提供一个接口,对底层实现的具体类进行封装后隐藏,提供统一的使用方法)
以上是关于抽象工厂设计模式的主要内容,如果未能解决你的问题,请参考以下文章