黑龙江省建设教育信息网网站,wordpress表前缀是什么,廊坊宣传片制作公司,定制手机网站建设定义
为子系统中的一组接口提供一个一致(稳定) 的界面#xff0c;Facade模式定义了一个高层接口#xff0c;这个接口使得这一子系统更加容易使用(复用)。
应用场景 上述A方案的问题在于组件的客户和组件中各种复杂的子系统有了过多的耦合#xff0c;随着外部客户程序和各子…定义
为子系统中的一组接口提供一个一致(稳定) 的界面Facade模式定义了一个高层接口这个接口使得这一子系统更加容易使用(复用)。
应用场景 上述A方案的问题在于组件的客户和组件中各种复杂的子系统有了过多的耦合随着外部客户程序和各子系统的演化这种过多的耦合面临很多变化的挑战。如何简化外部客户程序和系统间的交互接口?如何将外部客户程序的演化和内部子系统的变化之间的依赖相互解耦?
结构 代码示例
//Facade.h
/****************************************************/
#ifndef FACADE_H
#define FACADE_H
#include iostream
#include list
#include vector
#include stringusing namespace std;// 厨师
class Cook
{
public:// 炒菜void cookMeal(vectorstring menu) {for (int i 0; i menu.size(); i) {cout 正在炒 menu[i] endl;}}
};// 服务员
class Waiter
{
public:// 点菜void orderDishes(vectorstring menu) {for (int i 0; i menu.size(); i) {cout 点菜 menu[i] endl;}}// 收拾void clear() {cout 打扫卫生。 endl;}};// 前台
class Reception
{
public:// 欢迎void welcome() {cout 欢迎光临 endl;}// 买单void bill() {cout 买单完成欢迎下次再来 endl;}};// 门面
class Facade
{
public:// 构造函数Facade() {m_cook new Cook();m_waiter new Waiter();m_reception new Reception();}// 析构函数~Facade() {if (m_cook ! nullptr) {delete m_cook;m_cook nullptr;}if (m_waiter ! nullptr) {delete m_waiter;m_waiter nullptr;}if (m_reception ! nullptr) {delete m_reception;m_reception nullptr;}}// 经营void manage(vectorstring menu) {// 欢迎m_reception-welcome();// 服务员点菜m_waiter-orderDishes(menu);// 厨师炒菜m_cook-cookMeal(menu);// 客人用餐cout 客人用餐中。 endl;// 买单m_reception-bill();// 打扫卫生m_waiter-clear();}private:Cook *m_cook;Waiter *m_waiter;Reception *m_reception;
};#endif//test.cpp
/****************************************************/
#include Facade.h
int main()
{Facade *facade new Facade();// 餐馆运营vectorstring menu { 红烧肉,土豆丝,酸菜鱼 };facade-manage(menu);delete facade;facade nullptr;return 0;
}运行结果
要点总结
从客户程序的角度来看Facade模式简化 了整个组件系统的接口对于组件内部与外部客户程序来说达到了一-种“ 解耦 ”的效果——内部子系统的任何变化不会影响到Facade接口的变化。Facade设计模式更注重从架构的层次去看整个系统而不是单个类的层次。Facade很多时候更是一种架构设计模式。Facade设计模式并非一个集装箱可以任意地放进任何多个对象。Facade模式中组件的内部应该是“相互耦合关系比较大的一系列组件”而不是一个简单的功能集合。