【python设计模式】python设计模式之工厂模式

工厂模式(Factory Pattern)是最常见的设计模式;该设计模式属于创建式模式;

提供一种简单,快速,高效,安全地创建对象的方式。

通俗地讲:就是用工厂模式代替new操作,创建一种实例化对象的方法

本质:根据传入参数的不同,返回对应的不同对象(类似鸡生蛋),方便造对象,但不做任何动作。

工厂模式的目的是为了解耦:

1.把对象的创建和使用的过程分开。就是Class A 想调用 Class B ,那么A只是调用B的方法,而至于B的实例化,就交给工厂类

2.工厂模式可以降低代码重复。如果创建对象B的过程都很复杂,需要一定的代码量,而且很多地方都要用到,那么就会有很多的重复代码。我们可以这些创建对象B的代码放到工厂里统一管理。既减少了重复代码,也方便以后对B的创建过程的修改维护。

举个简单的例子,根据不同的参数,实例化不同品牌的手机类;对调用者来说屏蔽了实例化对细节

# 思想:通过函数的方式,传不同参数来生成不同的对象
class Apple:
    def __init__(self):
        self.data = "创建一个苹果手机"

    def getData(self):
        return self.data


class HuaWei:
    def __init__(self):
        self.data = "创建一个华为候机"

    def getData(self):
        return self.data


# 工厂方法: 根据传入参数的不同, 而返回对应的对象
def mobile_factory(mobile):
    if mobile == "Apple":
        make_mobile = Apple
    elif mobile == "HuaWei":
        make_mobile = HuaWei
    else:
        raise ValueError("请出入正确的手机类型: {}".format(mobile))
    return make_mobile()


if __name__ == "__main__":
#根据不同的参数,实例化不同品牌的手机类
    apple = mobile_factory("Apple")
    huawei = mobile_factory("HuaWei")

    data_apple = apple.getData()  # 返回String类型数据
    data_huawei = huawei.getData()  # 返回int类型数据
    # getData()返回不同类型的数据, 这在实际开发中是很常见的

    print(data_apple)  
    print(data_huawei)

ps:与多态的区别:

多态会调用实例的方法;

多态意味着可以对不同的对象使用同样的操作,但它们可能会以多 种形态呈现出结果。

在Python中,任何不知道对象到底是什么类 型,但又需要对象做点什么的时候,都会用到多态。

工厂模式只会返回实例,不会调用方法

举个鸭子多态的例子:

class Duck(object):
    def quack(self):
        print ("Quaaaaaack!")
    def feathers(self):
        print ("The duck has white and gray feathers.")

class Person(object):
    def quack(self):
        print ("The person imitates a duck.")
    def feathers(self):
        print ("The person takes a feather from the ground and shows it.")

def in_the_forest(duck):
    duck.quack()
    duck.feathers()

def game():
    donald = Duck()
    john = Person()
    in_the_forest(donald)
    in_the_forest( john)

game()

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值