当前位置:  开发笔记 > 编程语言 > 正文

用c ++示例解释Facade模式?

如何解决《用c++示例解释Facade模式?》经验,为你挑选了2个好方法。

我查看了维基百科的文章,似乎它缺少代码示例的c ++版本.如果没有这个,我无法完全理解Facade模式,你能用C++帮我解释一下吗?



1> Gishu..:

Facade模式:为复杂的子系统或接口集提供统一的简化接口.它提供了更高级别的接口,同时将客户端与复杂子系统分离.

一个帮助您了解...驾驶室驾驶员的示例.你告诉出租车司机'带我去PointX'(统一的简化高级界面)然后开始一系列动作(转动钥匙,换档,按下加速器等......)来执行任务.他抽象出底层子系统(变速箱,引擎等)的复杂性,因此您不必担心它们.驾驶员还将您与实际使用的车辆分离...您不直接与汽车接口.你可能会给他一个Merc但是你的驱动程序界面仍然是TakeMeTo(X)..你没有被绑定到汽车的任何特定型号/品牌.

在现实世界的示例中,您将找到与第三方组件或库接口的外观.您不希望代码依赖于特定供应商,因此您需要引入外观接口来进行分离.此外,您将简化此接口,例如,您的外观接口将具有名为SendData(字符串)的方法,但在内部,实现可以按特定顺序在m个子包上调用n个方法以完成任务.这就是维基百科页面上的图表所示.

例如,将一个例子翻译成C++并保持它很小

sResource = LWCPPSimple::get("http://www.perl.org")

在这里,C++中虚构的WWW库是一个统一协议,网络和解析问题方面的外观,这样我就可以专注于获取资源的主要重点.get方法隐藏/封装/保持一致的HTTP,FTP和其他各种协议的复杂性(在某些情况下是丑陋),请求 - 响应,连接管理等.如果明天LWCPPSimple的创建者找到一个让get()快两倍的方法,我免费获得性能优势.我的客户端代码不必更改.


@omouse,如果我可以对你的评论进行投票,我愿意.类比不仅对解释有用,而且对门面模式的一句话解释甚至都不正确.

2> wasker..:
class Engine
{

public:
    void Start() { }

};

class Headlights
{

public:
    void TurnOn() { }

};

//  That's your facade.
class Car
{

private:
    Engine engine;
    Headlights headlights;

public:
    void TurnIgnitionKeyOn()
    {
        headlights.TurnOn();
        engine.Start();
    }

};

int Main(int argc, char *argv[])
{
    //  Consuming facade.
    Car car;
    car.TurnIgnitionKeyOn();

    return 0;
}

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有