zoukankan      html  css  js  c++  java
  • 设计模式之门面模式

    一、门面模式的理解

    门面模式是一种结构型设计模式,它主要是为了完成:

    • 为子系统中的一组接口提供一个统一的接口,并定义一个高级接口来帮助客户端通过更加简单的方式使用子系统。
    • 门面所解决问题是,如何用单个接口对象来表示复杂的子系统。
    • 促进实现与多个客户端解耦

    这个模式有三个参与者:

    • 门面:将一个复杂的系统进行封装,为外部提供一个接口
    • 系统:内部有多个不同的子系统
    • 客户端:与门面直接进行交互,无需担心系统内部的复杂性

    二、门面模式的实现

      现实世界中有很多门面模式,比如,你现在要开一个大型生日party,那么可能需要准备酒店、歌唱团之类的东西,但是你可能嫌麻烦,此时可以找一个专门负责此类事务的机构负责,而你只需要问他是否已经筹备好即可。这可以比如一个门面模式:

    • 客服端:相当于需要在开始生日party前的所有准备工作
    • 门面:相当于处理准备工作的机构
    • 子系统:相当于酒店的餐饮、歌唱团的娱乐这一类的服务

    现在利用python对上述的实例进行模拟,显然有一个门面类EventManager,它简化了你的工作,完成与子系统的交流,如下所示,生日party的门面需要与酒店与歌唱团交流。

    class EventManager:
    
        def __init__(self):
            print("I talk to folks!")
    
        def arrange(self):
    
            self.wineshop=WineShop()
            self.wineshop.bookWineShop()
    
            self.singgroup=SingGroup()
            self.singgroup.setSingType()

    子系统就是酒店系统与歌唱团系统,它们自己将自己的服务准备完成。

    class WineShop:
    
        def __init__(self):
            print("arange of WineShop for birthday!")
    
        def __isAliable(self):
            """
            酒店是否还有可用的房间
            :return: 
            """
            return True
    
        def bookWineShop(self):
            """
            如果有可用房间就进行预定
            :return: 
            """
            if self.__isAliable():
                print("book success!")
    
    class SingGroup:
    
        def __init__(self):
            print("arange of SingGroup for birthday!")
    
        def setSingType(self):
            """
            歌唱团为生日party准备的音乐
            :return: 
            """
            print("Classical will be played")

    而此时你可以很悠闲,当想知道酒店以及歌唱团准备的怎么样,可以直接询问机构,它会告诉你。

    class You:
    
        def __init__(self):
            print("Birthday arrangements? ")
    
        def askEventManager(self):
            print("contact EventManager")
            em=EventManager()
            em.arrange()
    
    
    you=You()
    you.askEventManager()

      这样就完成了一个门面模式,门面模式设计的原理就是只是最少原则,减少对象之间的交互,在设计系统时,应该考虑与之交互类的数量以及交互的方式,这样避免了类与类之间紧密耦合的情况。

  • 相关阅读:
    第二十一章流 1流的操作 简单
    第二十章友元类与嵌套类 1友元类 简单
    第十九章 19 利用私有继承来实现代码重用 简单
    第二十章友元类与嵌套类 2嵌套类 简单
    第十九章 8链表类Node 简单
    第二十一章流 3用cin输入 简单
    第十九章 10 图书 药品管理系统 简单
    第十九章 11图书 药品管理系统 简单
    第二十一章流 4文件的输入和输出 简单
    第十九章 12 什么时候使用私有继承,什么时候使用包含 简单
  • 原文地址:https://www.cnblogs.com/shenjianping/p/11079923.html
Copyright © 2011-2022 走看看