ToB企服应用市场:ToB评测及商务社交产业平台
标题:
计划模式之表面计划模式
[打印本页]
作者:
惊落一身雪
时间:
2024-9-26 09:55
标题:
计划模式之表面计划模式
一、表面计划模式概念
表面模式
(Facade) 是一种布局型计划模式, 为子系统中的
一组接口
提供一个同等的界面,此模式界说了
一个高层接口
,这个接口使得这一子系统更加容易利用。
表面模式为复杂子系统提供了一个简单接口,并不为子系统添加新的功能和举动。
表面模式实现了子系统与客户之间的松耦合关系。
表面模式没有封装子系统的类,只是提供了简单的接口。 如果应用必要,它并不限制客户利用子系统类。因此可以再系统易用性与通用性之间选择。
表面模式注重的是简化接口,它更多的时候是从架构的层次去看整个系统,而并非单个类的层次。
如果你必要一个指向复杂子系统的直接接口, 且该接口的功能有限, 则可以利用表面模式。
如果必要将子系统组织为多层布局, 可以利用表面。
表面计划模式的布局
:
表面
(Facade) 提供了一种访问特定子系统功能的便捷方式, 其相识如何重定向客户端请求, 知晓如何利用一切运动部件。
创建
附加表面
(Additional Facade) 类可以避免多种不相干的功能污染单一表面, 使其变成又一个复杂布局。 客户端和其他表面都可利用附加表面。
复杂子系统
(Complex Subsystem) 由数十个不同对象构成。 如果要用这些对象完成有意义的工作, 你必须深入相识子系统的实现细节, 好比按照正确次序初始化对象和为其提供正确格式的数据。
子系统类不会意识到表面的存在, 它们在系统内运作而且相互之间可直接举行交互。
客户端
(Client) 利用表面代替对子系统对象的直接调用。
代码如下:
问题:有一套复杂的视频系统,以及以太复杂的音频系统。盼望简化利用流程,提供简化的利用面板。
解决方案:为子系统中的一组接口提供同等的界面,表面模式界说了一个高层接口,这个接口使得这一子系统更加容易利用。
#include <iostream>
#include <string>
//子系统1
class VedioSystem {
public:
std::string initial()const
{
return "视频系统:Ready!\n";
}
std::string play()const
{
return "视频系统:Go!\n";
}
std::string operationX()const
{
return "视频系统:不常用的操作!\n";
}
};
//子系统2
class RadioSystem {
public:
std::string init()const
{
return "音频系统:就绪!\n";
}
std::string play()const
{
return "音频系统:播放!\n";
}
std::string operationX()const
{
return "音频系统:不常用的操作!\n";
}
std::string mute()const
{
return "音频系统:静音!\n";
}
};
//外观类
class Controller {
protected:
VedioSystem* m_vedio;
RadioSystem* m_radio;
public:
Controller(VedioSystem* vedio = nullptr, RadioSystem* radio = nullptr)
{
if (!vedio)
{
m_vedio = vedio;
}
else
{
new VedioSystem();
m_radio = radio ? radio : new RadioSystem();
}
}
~Controller()
{
delete m_vedio;
}
std::string start()const
{
std::string string = "控制器启动视频系统\n";
string += m_vedio->initial();
string += m_radio->init();
string += "控制器启动播放\n";
string += m_vedio->play();
string += m_radio->play();
return string;
}
std::string mute()const
{
return "控制器静音\n" + m_radio->mute();
}
};
int main()
{
VedioSystem* vedio = new VedioSystem();
RadioSystem* radio = new RadioSystem();
Controller controller(vedio, radio);
std::cout << controller.start() << std::endl;
return 0;
}
复制代码
二、与其他模式的关系
表面模式 (opens new window)为现有对象界说了一个新接口, 适配器模式 (opens new window)则会试图运用已有的接口。
适配器
通常只封装一个对象,
表面
通常会作用于整个对象子系统上。
当只需对客户端代码隐蔽子系统创建对象的方式时, 你可以利用抽象工厂模式 (opens new window)来代替表面 (opens new window)。
享元模式 (opens new window)展示了如何天生大量的小型对象, 表面 (opens new window)则展示了如何用一个对象来代表整个子系统。
表面 (opens new window)和中介者模式 (opens new window)的职责类似: 它们都尝试在大量精密耦合的类中组织起互助。
表面
为子系统中的所有对象界说了一个简单接口, 但是它不提供任何新功能。 子系统本身不会意识到表面的存在。 子系统中的对象可以直接举行交换。
中介者
将系统中组件的沟通举动中心化。 各组件只知道中介者对象, 无法直接相互交换。
表面 (opens new window)类通常可以转换为单例模式 (opens new window)类, 由于在大部门情况下一个表面对象就富足了。
表面 (opens new window)与代理模式 (opens new window)的相似之处在于它们都缓存了一个复杂实体并自行对其举行初始化。
代理
与其服务对象遵循同一接口, 使得本身和服务对象可以互换, 在这一点上它与
表面
不同。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4