模式定义

为子系统中的一组接口提供一个一致(稳定)的界面,Facade模式定义了一个高层接口,这个接口使得这个子系统更加容易使用(复用)

类图

应用场景

1.当你需要使用复杂子系统的有限但直接的接口时,请使用Facade模式

2.当你需要将子系统组织成层时,请使用Facade模式

优点

简化客户端的调用

要点总结

要点总结

  • 从客户程序的角度来看,Facade模式简化了整个组件系统的接口,对于组件内部与外部客户程序来说,达到了一种“解耦”的效果–内部子系统的任何变化不会影响到facade接口的变化
  • Facade设计模式更注重从架构的层次去看整个系统,而不是单个类的层次,Facade很多时候更是一种架构设计模式
  • Facade设计模式并非一个集装箱,可以任意地放进任何多个对象,Facade模式中组件的内部应该是“相互耦合关系比较大的一系列组件”,而不是一个简单的功能集合

Go语言代码实现

工程目录

facade.go

package Facadeimport "fmt"type CarModel struct {}func NewCarModel() *CarModel {return &CarModel{}
}func (c * CarModel) SetModel () {fmt.Println("CarModel - SetModel")
}type CarEngine struct {}
func NewCarEngine () *CarEngine {return &CarEngine{}
}func (c *CarEngine) SetEngine (){fmt.Println("CarEngine - SetEngine")
}type CarBody struct {}
func NewCarBody () *CarBody {return &CarBody{}
}func (c *CarBody) SetCarBody() {fmt.Println("CarBody - SetBody")
}type CarFacade struct {model CarModelengine CarEnginebody CarBody
}func NewCarFacade() * CarFacade{return &CarFacade{model:  CarModel{},engine: CarEngine{},body:   CarBody{},}
}func (c *CarFacade) CreateCompleteCar() {c.model.SetModel()c.engine.SetEngine()c.body.SetCarBody()
}

facade_test.go

package Facadeimport "testing"func TestCarFacade_CreateCompleteCar(t *testing.T) {facade := CarFacade{}facade.CreateCompleteCar()
}

设计模式--门面(Facade)模式相关推荐

  1. facade java_Java设计模式之Facade模式

    Java设计模式之Facade模式  GOF<设计模式>一书对Facade模式是这样描述的: 为子系统中的一组接口提供一个统一接口.Facade模式定义了一个更高层的接口,使子系统更加容易 ...

  2. 设计模式:Facade模式

    Facade模式--简单窗口 当调用大型程序进行处理时,我们需要格外注意那些数量庞大的类之间错综复杂的关系.不过有一种更简单的做法,就是为这个大型程序提供一个"窗口".这样,我们就 ...

  3. 设计模式之facade模式

    从理论上讲facade模式,就是在系统中一个对象需要调用某些相似的功能,而将这些相似的功能进行封装,而留给需要调用的对象一个接口,这个接口不是我们编程意义上的接口,实际可以是一个接口,或者一个类.供调 ...

  4. C++设计模式之Facade模式(外观模式)

    Facade模式(外观模式),为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用. 我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象, ...

  5. 设计模式——门面(外观)模式

    一般设计一个复杂的系统的时候,常常将整个系统按照功能划分为几个子系统:这样便于开发,也便于形成比较清晰的架构. 但对于使用者来说,如果需要了解各个系统的功能,则不是一件很简单的事情!这时候提供一个了解 ...

  6. java设计模式之Facade模式

    介绍外观模式之前,首先让我们来看下面的例子: 假设我们现有一个对外接口FacadeService,里面有一个对外的方法a(): public interface FacadeService {publ ...

  7. php门面设计模式,经典设计模式——门面模式

    随着系统的不断改进和开发的深入,它们会变得越来越复杂,系统会生成大量的类,这使得程序更难被理解.门面模式可谓这些类提供一个简化的接口,从而简化访问这些类的复杂性,有时候这种简化可能降低访问这些底层累的 ...

  8. C++设计模式——门面模式(facade pattern)

    一.原理讲解 门面模式也叫做外观模式,实质就是一个封装接口,通常是将一类功能或者一个层次功能用一个函数封装起来,供客户端统一调用. 1.1意图 为子系统中的一组接口提供一个一致的界面,Facade模式 ...

  9. 设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用

    文章目录 Pre 定义 案例 Demo V1.0 Boss直接管理 V2.0 引入外观类 PmManagerFacade 何时使用Facade Tomcat Mybatis Pre 我们先来回顾下门面 ...

最新文章

  1. 资源 | Intel发布AI免费系列课程3部曲:机器学习基础、深度学习基础以及TensorFlow基础
  2. oracle取本月最后一天是星期几_Oracle 获取本周、本月、本季、现年的第一天和最后一天...
  3. Windows下 Apache+PHP5+MYSQL5+phpmyadmin 规范安装
  4. 数据是如何被保护的?高质量存储告诉你
  5. php 查询cpu使用率,php获取CPU使用情况的代码
  6. Bailian2808 校门外的树【基础】
  7. linux ldap配置详解
  8. XP自动搜索功能修复
  9. Mac mysql 忘记 root 密码,phpmyadmin 登录 No such file or directory 错误处理
  10. java不能变成class_java.lang.Class不能转换为java.lang.reflect.ParameterizedType
  11. 理解list和vector的区别
  12. 常见电子元器件检测经验
  13. 搭建ftp服务器的超详细步骤。
  14. MATLAB 调用百度云文字识别的具体应用
  15. 进军NFT,第三代公链GGC与NFT3.0技术平台BOBO、OKEx NFT深度联合
  16. 企业应如何运用ERP系统的BOM表?
  17. 做专业领域领航者 佳能正式推出了Professional Print Layout打印软件
  18. 岑村小学辅导班老师体会有感
  19. sql中用EXISTS替代IN、用NOT EXISTS替代NOT IN显著变化
  20. android usb通讯波特率,USB串口的特殊波特率通信

热门文章

  1. 电厂运维的cis数据_数据中心运维,太难难难了
  2. 浅析数据中心电气系统检测与认证
  3. 数据中心小母线与列头柜供配电系统的综合比较
  4. 网络的概念与网络的基本分类
  5. 您的数据中心UPS电池开关不能再选错和接错了
  6. 数据中心级交换机考核方法
  7. SWIG:SWIG的简介、安装、使用方法之详细攻略
  8. Py之pyecharts:基于大数据对人工智能进行各种可视化图表分析
  9. Interview:人工智能岗位面试—人工智能岗位求职之机器学习算法工程师必备知识框架结构图
  10. 数据科学-通过数据探索了解我们的特征