看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自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

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

posted on 2021-01-30 17:58  Wu_Candy  阅读(78)  评论(0编辑  收藏  举报