ITPub博客

首页 > 数据库 > 数据库开发技术 > python 面向对象设计模式实践篇(13)-结构型:代理模式实践

python 面向对象设计模式实践篇(13)-结构型:代理模式实践

原创 数据库开发技术 作者:程序员小钟同学 时间:2021-03-25 15:14:39 0 删除 编辑

结构型模式概述

定义:前篇初期中,我们讲过结构型模式主要解决的问题是:

  • 处理实体之间的关系,使得这些实体能够更好地协同工作
  • 结构型模式是类和对象的综合体

它具有的特性:

  • 1:设计过程注重通过组合获得更强大功能的对象和类的结构
  • 2:简化结构并识别类和对象之间的关系
  • 3:主要关注类的继承和组合
  • 4:通过类和对象的模式的

代理模式


所属分类

  • 结构型模式

意图

  • 为一个对象提供代理,做一个中间商(中间代理业务),用于控制对对象的访问。

适用场景

  • 如果你接了一个别人的业务,需要封装一下别人的业务,然后加工处理一下(其实就只是对他们的接口进行做一层访问代理),然后又对外提供给另一个商家。

  • 此时你的角色就是一个中间商赚差价!你在一个客户端和需要被代理的对象中间扮演中介的作用。

  • 和我们的nginx的正向代理和反向代理其实是一个意思!都是代理,只是代理的层面不一样。

角色对象

抽象角色:对供货商提供业务抽象

真实角色:实现抽象角色,实现的第三方真实的业务逻辑,并添加自己的业务逻辑处理,后续供代理角色调用

代理角色:(中间商)实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自身操作。

实践

#!/usr/bin/evn python
# coding=utf-8


from abc import ABCMeta, abstractmethod


class ximalaye_open_api(metaclass=ABCMeta):
    '''抽象角色,把业务进行抽象'''

    @abstractmethod
    def buy_vip(self): pass  # print("购买VIP会员")

    @abstractmethod
    def buy_album(self): pass  # print("购买收费专辑")


class mystie_open_api(ximalaye_open_api):
    '''抽象角色,把业务进行抽象'''

    def buy_vip(self):
        print("开始代理")
        print("调用喜马拉雅开放平台API-购买VIP会员")

    def buy_album(self):
        print("开始代理")
        print("调用喜马拉雅开放平台API-购买收费专辑")


# 实现代理对象,且调用相关的代理对象的方法
class open_api_proxy(ximalaye_open_api):
    #
    def __init__(self):
        # 实例化中间代理层
        self.mysite_api = mystie_open_api()

    def buy_vip(self):
        self.mysite_api.buy_vip()

    def buy_album(self):
        self.mysite_api.buy_album()

if __name__ == '__main__':
    proxy  = open_api_proxy()
    proxy.buy_vip()
    proxy.buy_album()

上面的示例中:

  • 1.定义了抽象角色(ximalaye_open_api):对供货商提供业务抽象
  • 2.定义实现了真实角色(mystie_open_api),它实现了抽象角色(ximalaye_open_api)内部需要实现的相关的方法和逻辑,其实本质上就是调用第三方API。
  • 3.可以实现抽象角色(ximalaye_open_api),也可以不实现,相当于定义个代理对象,调用我们的mystie_open_api的对象的业务逻辑的方法,给到别人去调用。

个人其他博客地址

简书:https://www.jianshu.com/u/d6960089b087

掘金:https://juejin.cn/user/2963939079225608

小钟同学 | 文 【原创】| QQ:308711822

  • 1:本文相关描述主要是个人的认知和见解,如有不当之处,还望各位大佬指正。
  • 2:关于文章内容,有部分内容参考自互联网,如有链接会声明标注;如没有及时标注备注的链接的,如有侵权请联系,我会立即删除处理哟。


原文作者:程序员小钟同学;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2021-02-20

  • 博文量
    224
  • 访问量
    111714