设计模式--门面(Facade)模式
模式定义
为子系统中的一组接口提供一个一致(稳定)的界面,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)模式相关推荐
- facade java_Java设计模式之Facade模式
Java设计模式之Facade模式 GOF<设计模式>一书对Facade模式是这样描述的: 为子系统中的一组接口提供一个统一接口.Facade模式定义了一个更高层的接口,使子系统更加容易 ...
- 设计模式:Facade模式
Facade模式--简单窗口 当调用大型程序进行处理时,我们需要格外注意那些数量庞大的类之间错综复杂的关系.不过有一种更简单的做法,就是为这个大型程序提供一个"窗口".这样,我们就 ...
- 设计模式之facade模式
从理论上讲facade模式,就是在系统中一个对象需要调用某些相似的功能,而将这些相似的功能进行封装,而留给需要调用的对象一个接口,这个接口不是我们编程意义上的接口,实际可以是一个接口,或者一个类.供调 ...
- C++设计模式之Facade模式(外观模式)
Facade模式(外观模式),为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用. 我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象, ...
- 设计模式——门面(外观)模式
一般设计一个复杂的系统的时候,常常将整个系统按照功能划分为几个子系统:这样便于开发,也便于形成比较清晰的架构. 但对于使用者来说,如果需要了解各个系统的功能,则不是一件很简单的事情!这时候提供一个了解 ...
- java设计模式之Facade模式
介绍外观模式之前,首先让我们来看下面的例子: 假设我们现有一个对外接口FacadeService,里面有一个对外的方法a(): public interface FacadeService {publ ...
- php门面设计模式,经典设计模式——门面模式
随着系统的不断改进和开发的深入,它们会变得越来越复杂,系统会生成大量的类,这使得程序更难被理解.门面模式可谓这些类提供一个简化的接口,从而简化访问这些类的复杂性,有时候这种简化可能降低访问这些底层累的 ...
- C++设计模式——门面模式(facade pattern)
一.原理讲解 门面模式也叫做外观模式,实质就是一个封装接口,通常是将一类功能或者一个层次功能用一个函数封装起来,供客户端统一调用. 1.1意图 为子系统中的一组接口提供一个一致的界面,Facade模式 ...
- 设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用
文章目录 Pre 定义 案例 Demo V1.0 Boss直接管理 V2.0 引入外观类 PmManagerFacade 何时使用Facade Tomcat Mybatis Pre 我们先来回顾下门面 ...
最新文章
- 资源 | Intel发布AI免费系列课程3部曲:机器学习基础、深度学习基础以及TensorFlow基础
- oracle取本月最后一天是星期几_Oracle 获取本周、本月、本季、现年的第一天和最后一天...
- Windows下 Apache+PHP5+MYSQL5+phpmyadmin 规范安装
- 数据是如何被保护的?高质量存储告诉你
- php 查询cpu使用率,php获取CPU使用情况的代码
- Bailian2808 校门外的树【基础】
- linux ldap配置详解
- XP自动搜索功能修复
- Mac mysql 忘记 root 密码,phpmyadmin 登录 No such file or directory 错误处理
- java不能变成class_java.lang.Class不能转换为java.lang.reflect.ParameterizedType
- 理解list和vector的区别
- 常见电子元器件检测经验
- 搭建ftp服务器的超详细步骤。
- MATLAB 调用百度云文字识别的具体应用
- 进军NFT,第三代公链GGC与NFT3.0技术平台BOBO、OKEx NFT深度联合
- 企业应如何运用ERP系统的BOM表?
- 做专业领域领航者 佳能正式推出了Professional Print Layout打印软件
- 岑村小学辅导班老师体会有感
- sql中用EXISTS替代IN、用NOT EXISTS替代NOT IN显著变化
- android usb通讯波特率,USB串口的特殊波特率通信