码迷,mamicode.com
首页 > 编程语言 > 详细

《精通Python设计模式》学习之抽象工厂

时间:2018-08-02 22:58:43      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:__name__   for   put   lease   div   except   技术分享   bat   on()   

这种工厂模式用得少,

可能在游戏类的编程中用得比较多吧。

这个思路清晰一定要OK的。

技术分享图片

class Frog:
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return self.name

    def interact_with(self, obstacle):
        print({} the Frog encouners {} and {}!.format(self,
                                                        obstacle,
                                                        obstacle.action()))

class Bug:
    def __str__(self):
        return a bug

    def action(self):
        return eats it

class FrogWorld:
    def __init__(self, name):
        print(self)
        self.player_name =name

    def __str__(self):
        return \n\n\t-------- Frog World ------

    def make_character(self):
        return Frog(self.player_name)

    def make_obstacle(self):
        return Bug()

class Wizard:
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return self.name

    def interact_with(self, obstacle):
        print({} the Wizard battles against {} and {}!.format(self,
                                                                obstacle,
                                                                obstacle.action()))

class Ork:
    def __str__(self):
        return an evil ork

    def action(self):
        return kills it

class WizardWorld:
    def __init__(self, name):
        print(self)
        self.player_name = name

    def __str__(self):
        return \n\n\t-------- Wizard World ------

    def make_character(self):
        return Wizard(self.player_name)

    def make_obstacle(self):
        return Ork()

class GameEnvironment:
    def __init__(self, factory):
        self.hero = factory.make_character()
        self.obstacle = factory.make_obstacle()

    def play(self):
        self.hero.interact_with(self.obstacle)


def validate_age(name):
    try:
        age = input(Welcome {}. How old are you? .format(name))
        age = int(age)
    except ValueError as err:
        print(Age {} is invalid, please try again....format(age))
        return (False, age)
    return (True, age)

def main():
    name = input("Hello. What‘s your name? ")
    valid_input = False
    while not valid_input:
        valid_input, age = validate_age(name)
    game = FrogWorld if age < 18 else WizardWorld
    environment = GameEnvironment(game(name))
    environment.play()

if __name__ == __main__:
    main()

    

技术分享图片

《精通Python设计模式》学习之抽象工厂

标签:__name__   for   put   lease   div   except   技术分享   bat   on()   

原文地址:https://www.cnblogs.com/aguncn/p/9409708.html

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