美文网首页
*禁白嫖*python ----- 工厂模式

*禁白嫖*python ----- 工厂模式

作者: 幼姿沫 | 来源:发表于2021-02-05 15:53 被阅读0次

禁白嫖   点赞 转发  适当打赏即可

'''

1.python的工厂模式

1.1  工厂方法模式的定义


工厂函数、工厂类对具体的生成环节进行了封装,这样有利于代码的后需扩展,即把功能划分的更具体,4s店只负责销售,汽车厂只负责制造

创建对象的接口,工厂模式让实例化类对象推迟到子类

销售汽车的4S店提供了创建对象的方法createCar 即工厂方法

子类对象的造车createCar方法创建出具体的产品

创建者类选择使用哪个子类就会决定实际创建的产品

'''

#定义伊兰特汽车类 YLT 的移动和停车方法

class YLT(object):

    def move(self):

        print('YLT car is moving !!!')

def stop(self):

    print('YLT car is stopping !!!')

#定义桑塔纳汽车类 STN 的移动和停车方法

class STN(object):

    def move(self):

        print('STN car is moving !!!')

    def stop(self):

        print('STN car is stopping !!!')

#定义基本汽车销售店类 为父类

class carStore(object):

#定义了造车方法 具体在子类中实现

    def createCar(self,typeName):

       pass

    #在汽车销售店里面下单具体的车类

    def order(self,typeName):

        #让工厂根据类型生产一辆汽车

        self.car=self.createCar(typeName)

        self.car.move()

        self.car.stop()

#定义现代车销售店类 实例化子类对象直接调用父类方法即可

class ModernStore(carStore):

#子类继承父类 实现造车类

    def createCar(self,typeName):

        self.carFactory=carFactory()

        #实现让工厂造车的方法

        return self.carFactory.createCar(typeName)

#定义一个汽车工厂类 让他根据具体的订单生产车辆

class carFactory(object):

    def createCar(self,typeName):

        self.typeName=typeName

        if self.typeName=='YLT':

            self.car=YLT()

        elif typeName=='STN':

            self.car=STN()

        return self.car

m=ModernStore()

m.order('YLT')

'''

类FrogWorld是一个抽象工厂,其主要职责是创建游戏的主人公和障碍物。

区分创建方法并使其名字通用(比如,make_character()和make_obstacle()),

这让我们可以动态改变当前激活的工厂(也因此改变了当前激活的游戏),

而无需进行任何代码变更。在一门静态语言中,抽象工厂是一个抽象类/接口,

具备一些空方法,但在Python中无需如此,因为类型是在运行时检测的,如下所示

'''

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'

#WizardWorld游戏也类似。在故事中唯一的区别是男巫战怪兽(如兽人)而不是吃虫子!

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()

'''

类GameEnvironment是我们游戏的主入口。它接受factory作为输入,

用其创建游戏的世界。方法play()则会启动hero和obstacle之间的交互,

如下所示。

'''

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)

'''

函数validate_age()提示用户提供一个有效的年龄。

如果年龄无效,则会返回一个元组,其第一个元素设置为False。

如果年龄没问题,元素的第一个元素则设置为True,

但我们真正关心的是元素的第二个元素,也就是用户提供的年龄,如下所示。

'''

    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)

'''

最后一个要点是main()函数,该函数请求用户的姓名和年龄,

并根据用户的年龄决定该玩哪个游戏,如下所示。

'''

def main():

    name =input("hello, What's your name?")

    valid_input =False

    while not valid_input:

        valid_input, age = validate_age(name)

    game = FrogWorldif age <18 else WizardWorld

    environment = GameEnvironment(game(name))

    environment.play()

main()

相关文章

网友评论

      本文标题:*禁白嫖*python ----- 工厂模式

      本文链接:https://www.haomeiwen.com/subject/scnytltx.html