首页 > 其他分享 >设计模式:简单工厂模式

设计模式:简单工厂模式

时间:2023-12-13 23:56:25浏览次数:26  
标签:Alipay pay self PaymentFactory 工厂 模式 money 设计模式 Payment

简单工厂模式

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

简单工厂模式的组成:

  1. 抽象产品(Abstract Product): 定义产品的接口,在这个例子中是 Payment 类。
  2. 具体产品(Concrete Product): 实现抽象产品接口的类,在这个例子中是 AlipayWechatPay
  3. 工厂(Factory): 一个负责创建具体产品实例的类,在这个例子中是 PaymentFactory
from abc import ABCMeta, abstractmethod


# Payment类是一个抽象产品角色,定义了支付方式的接口 pay。
class Payment(metaclass=ABCMeta):
    @abstractmethod
    def pay(self, money):
        pass


# 具体产品角色,实现了Payment类的支付宝支付方式即pay方法。
class Alipay(Payment):
    def __init__(self, use_huabei=False):
        self.use_huabei = use_huabei


    def pay(self, money):
        if self.use_huabei:
            print("花呗支付%d元。" % money)
        else:
            print("支付宝余额支付了%d元。" % money)

# 具体产品角色,实现了Payment类的微信支付方式即pay方法。
class WechatPay(Payment):
    def pay(self, money):
        print("微信支付了%d元." % money)


# PaymentFactory 是工厂 Factory 类角色 - 负责根据条件创建具体的支付方式 实例
class PaymentFactory:
    def create_payment(self, method):
        if method == "Alipay":
            return Alipay()
        elif method == "WechatPay":
            return WechatPay()
        elif method == "HuabeiPay":
            return Alipay(use_huabei=True)
        else:
            raise TypeError(f"No such payment named {method}")

            
# Client -- 客户端调用 - 示范了如何使用工厂类来获取和使用支付方式实例
pf = PaymentFactory() # 创建PaymentFactory类实例并将其赋值给pf变量
# PaymentFactory 类通过 create_payment 方法根据传入的方法名称来决定创建哪种支付方式的实例
p = pf.create_payment("HuabeiPay")
p.pay(199)

示例代码解析

  • Payment 类是一个抽象产品,定义了支付的接口 pay
  • AlipayWechatPay 是具体产品,它们实现了 Payment 类的 pay 方法。
  • PaymentFactory 是工厂类,负责根据不同的条件(这里是支付方式的名称)来创建并返回具体的产品实例。

标签:Alipay,pay,self,PaymentFactory,工厂,模式,money,设计模式,Payment
From: https://www.cnblogs.com/honeyShi/p/17900219.html

相关文章

  • 简单写一下设计模式7原则
    开闭原则:只许增加,不许修改;使用抽象进行构建,使用实现拓展细节;面向抽象编程;提高可复用性和可维护性依赖倒转原则:依赖抽象,而不是依赖具体的实现,可以减少耦合性,提高系统稳定性,降低修改程序的风险单一职责原则:一个类,接口,方法只负责一个职责;降低复杂度,提高可维护性接口隔离原则:使用多......
  • openGauss学习笔记-157 openGauss 数据库运维-备份与恢复-导出数据-使用gs_dump和gs_d
    openGauss学习笔记-157openGauss数据库运维-备份与恢复-导出数据-使用gs_dump和gs_dumpall命令导出数据-导出单个数据库-导出模式157.1导出模式openGauss目前支持使用gs_dump工具导出模式级的内容,包含模式的数据和定义。用户可通过灵活的自定义方式导出模式内容,不仅支持选定一......
  • 临床检验检查信息系统(LIS系统源码)C/S结构的应用模式
     LIS系统实现了实验室人力资源管理、标本管理、日常事务管理、网络管理、检验数据管理(采集、传输、处理、输出、发布)、报表管理过程的自动化,使实验室的操作人员和管理者从繁杂的手工劳作中解放出来,提高了检验人员的工作效率和效益,降低了劳动成本和差错发生率。LIS采用C/S(Clien......
  • 23种设计模式——外观模式
    今天我们讲解的是23种设计模式中外观模式。外观模式主要通过向现有的系统添加一个接口,来隐藏系统的复杂性。概念:外观模式是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的......
  • 浅谈设计模式-工厂模式的设计思想以及细节问题(上篇)
    1什么是工厂模式?工厂模式,顾名思义,就是把将对象的实例化过程封装在工厂类中的方式。工厂负责生产相应的对象实例。一般分为两种工厂模式:简单工厂;抽象工厂优点:用户不需要解决具体的细节问题,利用工厂类进行生产产品细节;可以将对象的创建与使用代码分离,提供一种统一的接口来创建不同类......
  • 苹果将推出全新iPhone安全模式:防止密码被盗
    据媒体报道,苹果公司将为iPhone推出一种新的安全模式,可以在小偷或其他攻击者知道用户的私人密码时保护用户。据了解,如果手机位于通常与其所有者无关的位置,并且开启了“被盗设备保护”功能,则该设备将需要苹果的FaceID面部识别以及用户执行敏感操作(例如查看存储密码或擦除手机)的密码......
  • 代理模式
    代理模式,有两个角色,一个是被代理者,一个是代理,代理其实就是生活中的中介,但是代理者可以在原本有的操作上面添加一些自己的操作或动作。这里代码上有两个重要的点,一个是代理者会也会继承或者实现被代理者,第二是代理者的构造函数会有一个类型为被代理者的参数,代码示例如下: packag......
  • 装饰器模式
    装饰器,顾名思义,一个是待装饰者,一个是装饰者,就像我们早餐吃的煎饼,煎饼是待装饰者,其他的火腿、里脊、土豆丝、生菜等都是装饰者,但最终都没有改变这还是一个煎饼。这里代码上有两个重要的点,一个是装饰者会也会继承或者实现被装饰者,第二是装饰者的构造函数会有一个类型为待装饰者的参......
  • 掌握建造者模式:构建复杂对象的灵活解决方案
    什么是建造者模式建造者模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。这种模式将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。举一个简单的例子:假设我们要创建一个复杂的对象,例如一辆汽车,它由多个部分组成,包括引擎、车身、轮胎等。如果我们使......
  • 博客园美化:光明/暗黑模式自动切换参考
    我的博客主题是SimpleMemory。浏览器浅色时代码主题xcode,深色时代码主题为hybrid,字体为Consolas。你现在看到的我的博客就是使用了暗黑和光明模式自动切换,会根据浏览器的主题自动识别。自动识别的关键CSS代码为:/*Lightmode*/@media(prefers-color-scheme:light){}/*......