• 看Python 如何实现门面模式


    引言

      打个还算比较形象的比喻吧,我们把门面比作建筑工地上的建筑物的表面,可以是贴有横幅,如:XXXX铁路工程局,这种比较醒目的一面,能更吸引人注意力,当人们从建筑物旁边经过时,可以看到其外部的面貌,此时并不了解其本身结构的复杂性。
      在程序里门面在隐藏内部复杂性的同时,也为外部客户端提供了一个可以轻松访问的接口。

    结构型设计模式

    门面模式与单例模式,工厂模式不同,它是一种结构型模式。

    • 结构型模式描述如何将对象和类组合成更大的结构。

    • 结构型模式是一种能够简化设计工作的模式,它能找出更简单的方法来认识或表示实体之间的关系。

    • 结构型模式是类和对象模式的综合体。类模式通过继承来描述抽象,从而提供更有用的程序接口,而对象模式描述了如何将对象联系起来从而组合成更大的对象。

    理解门面设计模式

    • 它为子系统中的一组接口提供一个统一的接口,并定义一个高级接口来帮助客户端通过更简单的方式使用子系统。

    • 门面所解决的问题是,如何用单个接口对象来表示复杂的子系统,它实际上并不是封装子系统,而是对底层子系统进行组合。

    • 促进实现子系统与客户端的解耦。

    下图或许能帮助你更好的理解:

    图片

    这里面有三个参与者:门面,客户端,系统

    客户端

    会实例化门面
    会向门面提出请求,去让子系统完成相应的功能
    客户端与门面进行交互,这样就可以轻松地与子系统进行通信并完成工作事项,而不必担心系统的复杂性。

    门面

    一个接口,知道某个请求应该交由哪个子系统处理
    通过组合的方式将客户端的请求委派给相应的子系统对象

    系统

    实现子系统的功能,由一组负责不同任务的类来表示
    处理门面对象分配的工作,但并不知道门面也不引用它

    简单理解:整个模式的执行方式就是,门面接收客户端的需求后,去安排系统完成工作。

    举个生活中常见的例子:某天,你和朋友一起去肯德基,你向服务员点了一份XXX套餐,套餐里有一杯冰可乐,一个汉堡,一份薯条,一份麻辣鸡翅,这时服务员听到你的点餐请求后,扭头告诉后厨需要一份XXX套餐,于是后厨有4个人开始行动,一个做可乐,一个做汉堡,一个做薯条,一个做鸡翅。

    在这个例子里,你就是客户端,服务员为门面,后厨的4个人做东西为4个子系统,他们组合合作完成这份套餐的制作。这样看来,门面模式的理解便非常简单清晰了。

    Python 实现门面模式

    #门面
    class ProjectProcess(object):
        def __init__(self):
            print("get the project of the process")
     
        def get_process(self):
            self.req=Requirement()
            self.req.getRequirementProcess()
     
            self.dev=Develop()
            self.dev.getDevelopProcess()
     
            self.test=Test()
            self.test.getTestProcess()
     
    #子系统
    class Requirement(object):
        def __init__(self):
            print("return the requirement of process")
     
        def getRequirementProcess(self):
            print("the requirement was complement 90%")
     
     
    class Develop(object):
        def __init__(self):
            print("return the requirement of process")
     
        def getDevelopProcess(self):
            print("the develop was complement 30%")
     
     
    class Test(object):
        def __init__(self):
            print("return the requirement of process")
     
        def getTestProcess(self):
            print("the test was complement 10%")
     
    #客户端
    if __name__ == '__main__':
        pp = ProjectProcess()
        pp.get_process()

    最少知识原则

       (1)、门面能够将客户端与实现具体功能的子系统解耦,其背后的设计原理即最少知识原则。
       (2)、在设计系统时,对于创建的每个对象,都应该考察与之交互的类的数量,以及交互的方式避免创建许多彼此紧密耦合的类。若类之间存在大量的依赖关系,系统就会变得难以维护。

    欢迎关注【无量测试之道】公众号,回复【领取资源】

    Python编程学习资源干货、
    Python+Appium框架APP的UI自动化、
    Python+Selenium框架Web的UI自动化、
    Python+Unittest框架API自动化、

    资源和代码 免费送啦~
    文章下方有公众号二维码,可直接微信扫一扫关注即可。

    备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

     添加关注,让我们一起共同成长!

  • 相关阅读:
    shell bash memo
    python performance measure 02
    跨域的几种方法
    表示集合的数据结构:数组(Array),对象(Object),Map和Set
    [H5]range对象的setStart/setEnd方法
    文件上传:input file FileReader
    localStorage,sessionStorage,cookie使用场景和区别
    设置获取cookie,setCookie,getCookie
    js中__proto__, property, prototype, 对象自身属性方法和原型中的属性方法的区别
    使用正则表达式--切分字符串
  • 原文地址:https://www.cnblogs.com/Wu13241454771/p/14349872.html
Copyright © 2020-2023  润新知