python工厂方法模式怎么用(python,开发技术)

时间:2024-05-02 07:24:30 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

一、简介

工厂模式是属于创建型模式,它提供了一种创建对象的最佳方式。

在工厂模式中,我们在创建对象的过程中不会向客户端暴露实现逻辑,而是通过一个共同的接口类来指向新创建的对象。

二、工厂方法模式的主要角色

抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法newProduct()来创建产品。
具体工厂(ConcreteFactory):主要实现抽象工厂中的抽象方法,完成具体产品的创建。
抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。
具体产品(ConcreteProduct):实现了抽象产品定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。

三、简单工厂模式

内容:不直接向客户端暴露对象创建实现的细节,而是通过工厂类来负责创建产品类的实例。

具体代码(jiandan.py):

fromabcimportABCMeta,abstractmethodclassPayment(metaclass=ABCMeta):@abstractmethoddefpay(self):passclassWechatPay(Payment):defpay(self,money):print("微信支付%s"%money)returnclassAlipay(Payment):def__init__(self,huabei=False):self.huabei=huabeidefpay(self,money):ifself.huabei:print("花呗支付%s"%money)else:print("支付宝余额支付%s"%money)classPaymentFactory:defcreate_pay(self,method):ifmethod=="wechat":returnWechatPay()elifmethod=="alipay":returnAlipay()elifmethod=="huabei":returnAlipay(huabei=True)else:raiseTypeError("Nosuchpaymentname%s"%method)#clientpf=PaymentFactory()p=pf.create_pay("huabei")p.pay(100)

结果:

python工厂方法模式怎么用

ABCMeta是python的一个元类,用于在Python程序中创建抽象基类,抽象基类中声明的抽象方法,使用abstractmethod装饰器装饰。

简单明了的说:创建一个公共的抽象类,然后创建多个支付的类继承这个抽象类,各种支付类里实现具体的支付方式,通过工厂类选择支付方式,这样客服端只实现支付方式,不需要知道具体的实现方法。

优点:

隐藏了对象创建的实现细节客户端不需要修改代码

缺点:

违反了单一职责原则,将创建逻辑集中到一个工厂类里当添加新产品时,需要修改工厂类代码,违反了开闭原则

四、工厂模式

内容:定义了一个用于创建对象的接口(工厂类),让工厂子类决定实例化哪一个产品类。

具体代码(factory_method.py):

fromabcimportABCMeta,abstractmethodclassPayment(metaclass=ABCMeta):@abstractmethoddefpay(self):passclassWechatPay(Payment):defpay(self,money):print("微信支付%s"%money)returnclassAlipay(Payment):def__init__(self,huabei=False):self.huabei=huabeidefpay(self,money):ifself.huabei:print("花呗支付%s"%money)else:print("支付宝余额支付%s"%money)classPaymentFactory(metaclass=ABCMeta):@abstractmethoddefcreate_method(self):passclassAlipayFactory(PaymentFactory):defcreate_method(self):returnAlipay()classWechatFactory(PaymentFactory):defcreate_method(self):returnWechatPay()classHuabeiFactory(PaymentFactory):defcreate_method(self):returnAlipay(huabei=True)pf=HuabeiFactory()p=pf.create_method()p.pay(100)

结果:

python工厂方法模式怎么用

五、抽象工厂模式

内容:定义一个工厂类接口,让工厂子类来创建一系列相关或者相互依赖的对象。

与工厂模式相比,抽象工厂模式中的每一个产品都生产一套产品。

具体代码(abstract_factory.py):

fromabcimportABCMeta,abstractmethod"""抽象产品"""classPhoneShell(metaclass=ABCMeta):@abstractmethoddefshow_shell(self):passclassOS(metaclass=ABCMeta):@abstractmethoddefshow_os(self):passclassCPU(metaclass=ABCMeta):@abstractmethoddefshow_cpu(self):pass#抽象工厂classPhoneFactory(metaclass=ABCMeta):@abstractmethoddefmake_shell(self):pass@abstractmethoddefmake_cpu(self):pass@abstractmethoddefmake_os(self):pass#具体产品classSmallShell(PhoneShell):defshow_shell(self):print("普通手机壳小手机壳")classBigShell(PhoneShell):defshow_shell(self):print("普通手机壳大手机壳")classAppleShell(PhoneShell):defshow_shell(self):print("苹果手机壳")classSnapDragonCPU(CPU):defshow_cpu(self):print("骁龙CPU")classMediaTekCPU(CPU):defshow_cpu(self):print("联发科CPU")classAppleCPU(CPU):defshow_cpu(self):print("苹果CPU")classAppleOS(OS):defshow_os(self):print("苹果OS系统")classAndroidOS(OS):defshow_os(self):print("Android系统")classIOS(OS):defshow_os(self):print("IOS系统")#具体工厂classMiFactory(PhoneFactory):defmake_cpu(self):returnSnapDragonCPU()defmake_os(self):returnAndroidOS()defmake_shell(self):returnBigShell()classHuaweiFactory(PhoneFactory):defmake_cpu(self):returnMediaTekCPU()defmake_os(self):returnAndroidOS()defmake_shell(self):returnSmallShell()classIPhoneFactory(PhoneFactory):defmake_cpu(self):returnAppleCPU()defmake_os(self):returnAppleOS()defmake_shell(self):returnAppleShell()classPhone:def__init__(self,cpu,os,shell):self.cpu=cpuself.os=osself.shell=shelldefshow_info(self):print("手机信息:")self.cpu.show_cpu()self.os.show_os()self.shell.show_shell()defmake_phone(factory):cpu=factory.make_cpu()os=factory.make_os()shell=factory.make_shell()returnPhone(cpu,os,shell)p1=make_phone(MiFactory())p1.show_info()

结果:

python工厂方法模式怎么用

优点:

将客户端与类的具体实现相分离每个工厂创建了一个完整的产品系列,使得易于交换产品系列有利于产品的一致性(及产品之间的约束关系)

缺点:

难以支持新种类的抽象产品

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:python工厂方法模式怎么用的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Java泛型的作用是什么下一篇:

3 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18