首页 > 编程语言 >Python:设计模式

Python:设计模式

时间:2023-12-18 21:11:06浏览次数:28  
标签:Python money self 模式 pay 设计模式 class def

一、设计模式与面向对象

1.1 设计模式

  软件设计阶段针对反复出现的问题提出的统一解决方案。每类问题的解决方案都被系统的命名为XX设计模式。

1.2 面向对象

  按照一件事的组成元素分别制作进行组装。这些元素分为属性与接口。

1.2.1 三大特性

  封装:将对象封装为类,将对象数据操作封装为函数。封装分为类内/类外,私有/公有

  继承:父类与子类,表示对象与对象之间的关系

  多态:子类重写父类函数,C++中声明为virutal。python本身是多态语言,只管实现,不用关注细节。

  接口:抽象类,规定继承抽象类的实现行为。接口掌握着所有子类方法的规则,开发中直接阅读接口(抽象类)即可明白其余类方法,方便开发。

from abc import ABCMeta, abstractmethod

# abstract class
class Payment(metaclass=ABCMeta):
    # is overrider in
    @abstractmethod
    def pay(self, money):  # 接口:规定了A_Pay、B_Pay必须实现这个方法。多态的体现之一就是接口在不同子类中的多种实现,这种性质为多态性。
        pass

class A_Pay(Payment): # 封装:将对象A的行为及属性封装为类
    # overriders
    def pay(self, money):
        print("A 支付 %d" % money)

class B_Pay(Payment): # 继承Payment这个接口(抽象类)
     # overriders
    def pay(self, money):
        print("B 支付 %d" % money)

p = A_Pay()
n = B_Pay()
p.pay(100)
n.pay(100)

1.2.2 设计原则

  开放封闭原则:软件实体应对修改关闭,对扩展开放。

  里氏替换原则:子类与父类的同名方法在形参、返回值、逻辑必须一致。

  依赖倒置原则:上层不应该依赖下层,两者都应依赖抽象(接口),即面向接口编程。

  接口隔离原则:使用多个专门的接口,避免使用单一的总接口,即避免依赖那些不需要的接口。适用于类。

  单一职责原则:一个类只负责一项职责。

1.3 面向过程

  按照制作一件事物的顺序进行开发。

二、 设计模式分类

  创建型模式:工厂方法模式、抽象工厂模式、创建者模式、原型模式、单例模式

  结构型模式:适配器模式、桥模式、组合模式、装饰模式、外观模式、享元模式、代理模式

  行为型模式:解释器模式、责任链模式、命令模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、访问者模式、模板方法模式

三、简单工厂模式

3.1 内容

  不直接向客户端暴露对象创建的实现细节,而是通过一个工厂类来负责创建产品类的实例。简化上层调用的统一接口。

3.3 代码实现

from abc import ABCMeta, abstractmethod

# abstract class
class Payment(metaclass=ABCMeta):
    @abstractmethod  # 有抽象方法的类为抽象类
    def pay(self, money):
        pass


class AliPay(Payment):
    def pay(self, money):
        print("支付宝 支付 %d" % money)


class WeChatPay(Payment):
    def pay(self, money):
        print("微信 支付 %d" % money)

# 工厂类
class PayFactory:
    # 工厂函数
    def creat_payment(self,method):
        if method == 'AliPay':
            return AliPay()
        elif method == 'WeChatPay':
            return WeChatPay()
        else:
            raise TypeError("No such payment named %s" % method)


pf = PayFactory() # 实例化工厂
p = pf.creat_payment('AliPay') #制造支付方式
p.pay(100)

3.4 优缺点

  优点:客户端调用的接口唯一。

  缺点:有新的产品加入时需要修改工厂类,违反开放封闭原则。

3.5 工厂方法模式

  一个工厂只生产一种产品。

from abc import ABCMeta, abstractmethod


# abstract class
class Payment(metaclass=ABCMeta):
    @abstractmethod  # 有抽象方法的类为抽象类
    def pay(self, money):
        pass


class AliPay(Payment):
    def pay(self, money):
        print("支付宝 支付 %d" % money)


class WeChatPay(Payment):
    def pay(self, money):
        print("微信 支付 %d" % money)


# 工厂接口抽象基类
class PayBasicInterFaceFactory(metaclass=ABCMeta):
    @abstractmethod
    def creat_payment(self):
        raise NotImplementedError


# 工厂类
class AliPayFactory(PayBasicInterFaceFactory):
    # 工厂函数
    def creat_payment(self):
        return AliPay()


# 工厂类
class WeChatPayFactory(PayBasicInterFaceFactory):
    # 工厂函数
    def creat_payment(self):
        return WeChatPay()


ali_pf = AliPayFactory()
p = ali_pf.creat_payment()
p.pay(100)

we_pf = WeChatPayFactory()
p = we_pf.creat_payment()
p.pay(100)

五、抽象工厂模式

建造者模式

单例模式

适配器模式

桥模式

组合模式

外观模式

代理模式

责任链模式

 

标签:Python,money,self,模式,pay,设计模式,class,def
From: https://www.cnblogs.com/YiMo9929/p/17909795.html

相关文章

  • 自动化文件管理:使用Python创建匹配Excel数据的文本文件
    介绍在日常工作中,我们经常需要处理大量的数据和文件。尤其是在处理涉及多层嵌套目录和数据文件时,手动操作变得极其繁琐和耗时。为了提高效率,自动化这一过程显得尤为重要。本博客介绍了一个实用的Python脚本,它能够自动读取Excel表格中的数据,并在相应的文件夹中创建文本文件。这个......
  • *Python 下载视频
    python下载文件的三种方法_python下载文件_xiaoyaozi2020的博客-CSDN博客......
  • Python获取时间戳
    一、获取时间戳importtimeimportdatetimet=time.time()print(t)#原始时间数据print(int(t))#秒级时间戳print(int(round(t*1000)))#毫秒级时间戳print(int(round(t*1000000)))#微秒级时间戳#输出#16488......
  • Python基础知识
    一、先置知识1、标识符标识符由字母、数字、下划线组成。所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。标识符是区分大小写的。以下划线开头的标识符是有特殊意义的。以单下划线开头_foo的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用**......
  • ***Python语句操作
    一、条件控制Python中有哪些值代表FalseNoneFlase0"":空字符串[]:空列表{}:空字典():空元组1、if语句ifcondition_1:statement_block_1elifcondition_2:statement_block_2else:statement_block_3注意:1、每个条件后面要使用冒号**:**,表示接下来......
  • 自动化查找并记录含图片文件夹的Python脚本
    功能介绍此Python脚本用于遍历指定的父目录,自动识别并记录所有包含图片文件(如PNG、JPG、GIF等格式)的子文件夹。脚本运行后,将在父目录下生成一个名为“文件夹名统计”的Excel表格,其中列出了所有含有图片的文件夹名称。这对于整理大量分散在不同子文件夹中的图片文件特别有用,尤其是......
  • python模拟体育竞技分析
    采用排球比赛规则点击查看代码fromrandomimportrandomdefprintInfo():#打印程序介绍信息print('这个程序模拟两个选手A和B的某种竞技比赛')print('程序运行需要A和B的能力值(以0到1之间的小数表示)')defgetInputs():#获得程序运行参数a=eval......
  • 2023-12-18设计模式概述
                 ......
  • 【python爬虫课程设计】纵横中文网——分类数据爬取+数据可视化
    一、选题的背景通过新书榜和推荐榜来分析小说分类和人气之间的关系,让作者能加了解读者的需求,写出令读者感兴趣的题材来吸引读者。热门的小说分类是社会文化普遍认可的体现,了解和分析社会文化对于提升和改善社会文化起着重要作用。了解热门小说分类让新人作者选择题材时有份......
  • Python实现模块热加载
    为什么需要热加载在某些情况,你可能不希望关闭Python进程并重新打开,或者你无法重新启动Python,这时候就需要实现实时修改代码实时生效,而不用重新启动Python在我的需求下,这个功能非常重要,我将Python注入到了其他进程,并作为一个线程运行。如果我想关闭Python,要么杀死Python相关的线程......