iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python工厂方法模式原理与实现
  • 289
分享到

python工厂方法模式原理与实现

2024-04-02 19:04:59 289人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、简介二、工厂方法模式的主要角色三、简单工厂模式四、工厂模式五、抽象工厂模式总结一、简介 工厂模式是属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对

一、简介

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

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

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

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

三、简单工厂模式

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

具体代码(jiandan.py):

from abc import ABCMeta, abstractmethod
 
class Payment(metaclass=ABCMeta):
    @abstractmethod
    def pay(self):
        pass
 
class WechatPay(Payment):
    def pay(self, money):
        print("微信支付%s" % money)
        return
 
class Alipay(Payment):
    def __init__(self, huabei=False):
        self.huabei = huabei
    def pay(self, money):
        if self.huabei:
            print("花呗支付%s" % money)
        else:
            print("支付宝余额支付%s" % money)
 
class PaymentFactory:
    def create_pay(self, method):
        if method == "wechat":
            return WechatPay()
        elif method == "alipay":
            return Alipay()
        elif method == "huabei":
            return Alipay(huabei=True)
        else:
            raise TypeError("No such payment name %s" % method)
 
# client
pf = PaymentFactory()
p = pf.create_pay("huabei")
p.pay(100)

结果:

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

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

优点:

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

缺点:

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

四、工厂模式

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

具体代码(factory_method.py):

from abc import ABCMeta, abstractmethod
 
class Payment(metaclass=ABCMeta):
    @abstractmethod
    def pay(self):
        pass
 
class WechatPay(Payment):
    def pay(self, money):
        print("微信支付%s" % money)
        return
 
class Alipay(Payment):
    def __init__(self, huabei=False):
        self.huabei = huabei
    def pay(self, money):
        if self.huabei:
            print("花呗支付%s" % money)
        else:
            print("支付宝余额支付%s" % money)
 
class PaymentFactory(metaclass=ABCMeta):
    @abstractmethod
    def create_method(self):
        pass
 
class AlipayFactory(PaymentFactory):
    def create_method(self):
        return Alipay()
 
class WechatFactory(PaymentFactory):
    def create_method(self):
        return WechatPay()
 
class HuabeiFactory(PaymentFactory):
    def create_method(self):
        return Alipay(huabei=True)
 
pf = HuabeiFactory()
p = pf.create_method()
p.pay(100)

结果:

五、抽象工厂模式

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

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

具体代码(abstract_factory.py):

from abc import ABCMeta, abstractmethod
"""
抽象产品
"""
 
class Phoneshell(metaclass=ABCMeta):
    @abstractmethod
    def show_shell(self):
        pass
 
class OS(metaclass=ABCMeta):
    @abstractmethod
    def show_os(self):
        pass
 
class CPU(metaclass=ABCMeta):
    @abstractmethod
    def show_cpu(self):
        pass
 
# 抽象工厂
class PhoneFactory(metaclass=ABCMeta):
    @abstractmethod
    def make_shell(self):
        pass
    @abstractmethod
    def make_cpu(self):
        pass
    @abstractmethod
    def make_os(self):
        pass
 
# 具体产品
class SmallShell(PhoneShell):
    def show_shell(self):
        print("普通手机壳小手机壳")
 
class BigShell(PhoneShell):
    def show_shell(self):
        print("普通手机壳大手机壳")
 
class AppleShell(PhoneShell):
    def show_shell(self):
        print("苹果手机壳")
 
class SnapDraGonCPU(CPU):
    def show_cpu(self):
        print("骁龙CPU")
 
class MediaTekCPU(CPU):
    def show_cpu(self):
        print("联发科CPU")
 
class AppleCPU(CPU):
    def show_cpu(self):
        print("苹果CPU")
 
class AppleOS(OS):
    def show_os(self):
        print("苹果OS系统")
 
class AndroidOS(OS):
    def show_os(self):
        print("Android系统")
 
class iOS(OS):
    def show_os(self):
        print("ioS系统")
 
# 具体工厂
class MiFactory(PhoneFactory):
    def make_cpu(self):
        return SnapDragonCPU()
    def make_os(self):
        return AndroidOS()
    def make_shell(self):
        return BigShell()
 
class HuaweiFactory(PhoneFactory):
    def make_cpu(self):
        return MediaTekCPU()
    def make_os(self):
        return AndroidOS()
    def make_shell(self):
        return SmallShell()
 
class IPhoneFactory(PhoneFactory):
    def make_cpu(self):
        return AppleCPU()
    def make_os(self):
        return AppleOS()
    def make_shell(self):
        return AppleShell()
 
class Phone:
    def __init__(self, cpu, os, shell):
        self.cpu = cpu
        self.os = os
        self.shell = shell
    def show_info(self):
        print("手机信息:")
        self.cpu.show_cpu()
        self.os.show_os()
        self.shell.show_shell()
 
def make_phone(factory):
    cpu = factory.make_cpu()
    os = factory.make_os()
    shell = factory.make_shell()
    return Phone(cpu, os, shell)
 
p1 = make_phone(MiFactory())
p1.show_info()

结果:

优点:

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

缺点:

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

总结

到此这篇关于python工厂方法模式原理与实现的文章就介绍到这了,更多相关python工厂方法模式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: python工厂方法模式原理与实现

本文链接: https://www.lsjlt.com/news/139392.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python工厂方法模式原理与实现
    目录一、简介二、工厂方法模式的主要角色三、简单工厂模式四、工厂模式五、抽象工厂模式总结一、简介 工厂模式是属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对...
    99+
    2024-04-02
  • C#实现工厂方法模式
    场景:简单工厂时候,我设计了一个场景,有三种剑去打怪,这时候,需求变化了,我三种剑变成了,匕首、剑以及木棒,想要用工厂方法来实现,怎么弄? 1.上文讲过简单工厂模式,它的最大优点在于...
    99+
    2024-04-02
  • Java简单工厂,工厂方法,抽象工厂模式怎么实现
    这篇文章主要讲解了“Java简单工厂,工厂方法,抽象工厂模式怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java简单工厂,工厂方法,抽象工厂模式怎么实现”吧!1、简单工厂模式1.定...
    99+
    2023-06-29
  • php工厂方法模式如何实现
    本篇内容介绍了“php工厂方法模式如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!PHP工厂方法模式的好处是:核心类只需要关注工厂类的...
    99+
    2023-06-29
  • Java工厂方法模式怎么实现
    这篇文章主要讲解了“Java工厂方法模式怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java工厂方法模式怎么实现”吧!一、什么是工厂方法模式?工厂方法模式:也叫虚拟构造器模式或者多...
    99+
    2023-06-29
  • C#如何实现工厂方法模式
    本篇内容介绍了“C#如何实现工厂方法模式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!场景:简单工厂时候,我设计了一个场景,有三种剑去打怪,...
    99+
    2023-07-02
  • Java工厂模式之简单工厂,工厂方法,抽象工厂模式详解
    目录1、简单工厂模式1.定义2.代码案例3.适用场景4.优缺点2、工厂方法模式1.定义2.代码案例3.适用场景4.优缺点3、抽象工厂模式1.定义2.代码案例3.适用场景4.优缺点4、...
    99+
    2024-04-02
  • golang实现简单工厂、方法工厂、抽象工厂三种设计模式
    1、简单工厂: 第一步:创建一个文章接口,需要实现阅读和写作的功能。 type Article interface { ReadArticle() string WriteArt...
    99+
    2024-04-02
  • Springboot中实现策略模式+工厂模式的方法
      策略模式和工厂模式相信大家都比较熟悉,但是大家有没有在springboot中实现策略和工厂模式   具体策略模式和工厂模式的UML我就不给出来了,使用这个这两个模式主要是防止程序...
    99+
    2024-04-02
  • 关于工厂方法模式的Java实现
    目录工厂方法模式简述创建步骤步骤1步骤2步骤3步骤4步骤5工厂方法模式简述 与简单工厂模式基本相同,只是工厂是一个抽象的,需要有具体的工厂去实现它,然后利用这个工厂生产产品,之所以出...
    99+
    2024-04-02
  • golang实现工厂模式
    Go语言是一门非常流行的静态编译型语言,其独特的语法和特性使其在很多场景下都具有很好的应用能力。其中,工厂模式是Go语言中非常常见的设计模式之一。本文将介绍如何用Go语言实现工厂模式。工厂模式简介工厂模式是一种常见的创建型模式,它通过定义一...
    99+
    2023-05-15
  • Python中怎样实现工厂模式
    本篇文章给大家分享的是有关Python中怎样实现工厂模式,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。如下是工厂方法的实现,里面用到了字典来做键值的映射。#!/usr/bin/...
    99+
    2023-06-04
  • Java怎么实现工厂方法设计模式
    这篇文章主要介绍“Java怎么实现工厂方法设计模式”,在日常操作中,相信很多人在Java怎么实现工厂方法设计模式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java怎么实现工厂方法设计模式”的疑惑有所帮助!...
    99+
    2023-06-04
  • 工厂方法模式介绍
    韩敬海 设计模式(Java版) (一)定义 定义一个创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。 工厂方法涉及的角色有: 1 .抽象工厂角色:工厂方法模式的核心,与应用系统无关,任何创建对象的工厂类必...
    99+
    2023-08-30
    工厂方法模式
  • Python如何实现抽象工厂模式
    这篇文章主要介绍“Python如何实现抽象工厂模式”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python如何实现抽象工厂模式”文章能帮助大家解决问题。实 现下面是实现Abstract Facto...
    99+
    2023-06-19
  • Python怎么实现抽象工厂模式
    这篇文章主要介绍“Python怎么实现抽象工厂模式”,在日常操作中,相信很多人在Python怎么实现抽象工厂模式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python怎么实现抽象工厂模式”的疑惑有所帮助!...
    99+
    2023-06-19
  • 怎么用Java代码实现工厂方法模式
    今天小编给大家分享一下怎么用Java代码实现工厂方法模式的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 工厂方法模式介绍...
    99+
    2023-06-29
  • PHP抽象工厂模式的优点与实现方法是什么
    本篇内容介绍了“PHP抽象工厂模式的优点与实现方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!抽象工厂模式Abstract Fact...
    99+
    2023-07-05
  • 在java项目中实现工厂模式的方法
    在java项目中实现工厂模式的方法?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。java 工厂模式的实例详解工厂方法中的“工厂”和我们平常理解的一样:用于生产产品。而客户是要和...
    99+
    2023-05-31
    java 工厂模式 ava
  • java设计模式学习之工厂方法模式如何实现
    这篇文章主要为大家展示了“java设计模式学习之工厂方法模式如何实现”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java设计模式学习之工厂方法模式如何实现”这篇文章吧。工厂方法模式(Facto...
    99+
    2023-05-31
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作