Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用c+解释立面模式+;例子? 我已经检查过了,看起来它缺少了代码示例的C++版本。我不能完全欣赏这个外观模式没有这个,你能帮助解释它给我用C++ + < /p> < p>我做了一个搜索和替换的例子。这可能对你没有帮助,因为如果你理解C++,那么你应该能够理解C语言,因为它使用相同的构造和关键字(类、函数、命名空间、公共等) /“子系统类别A” #包括 类子系统 { 公众: void MethodOne() { std::cout_C++_Design Patterns_Facade - Fatal编程技术网

用c+解释立面模式+;例子? 我已经检查过了,看起来它缺少了代码示例的C++版本。我不能完全欣赏这个外观模式没有这个,你能帮助解释它给我用C++ + < /p> < p>我做了一个搜索和替换的例子。这可能对你没有帮助,因为如果你理解C++,那么你应该能够理解C语言,因为它使用相同的构造和关键字(类、函数、命名空间、公共等) /“子系统类别A” #包括 类子系统 { 公众: void MethodOne() { std::cout

用c+解释立面模式+;例子? 我已经检查过了,看起来它缺少了代码示例的C++版本。我不能完全欣赏这个外观模式没有这个,你能帮助解释它给我用C++ + < /p> < p>我做了一个搜索和替换的例子。这可能对你没有帮助,因为如果你理解C++,那么你应该能够理解C语言,因为它使用相同的构造和关键字(类、函数、命名空间、公共等) /“子系统类别A” #包括 类子系统 { 公众: void MethodOne() { std::cout,c++,design-patterns,facade,C++,Design Patterns,Facade,从某种意义上说,Facade只是一个API,用于希望与隐藏的东西交互的客户端 当PACE在C++中实现简单的C API或比API更复杂时,它是有用的。或者当库需要经过多次迭代更新时,在客户端和库之间获得固定的屏障,并且希望尽可能少地影响客户端。例如,如果基于C的库需要要在内部更新到C++或其他东西,或者只是换一个完全不同的东西,那么FACDED对于客户端来说是一个很好的中间层。 < P>在设计模式上的这个优秀站点上。 < P> 外观模式:为一个复杂的子系统或一组接口提供统一的简化接口。创建一个更

从某种意义上说,Facade只是一个API,用于希望与隐藏的东西交互的客户端


当PACE在C++中实现简单的C API或比API更复杂时,它是有用的。或者当库需要经过多次迭代更新时,在客户端和库之间获得固定的屏障,并且希望尽可能少地影响客户端。例如,如果基于C的库需要要在内部更新到C++或其他东西,或者只是换一个完全不同的东西,那么FACDED对于客户端来说是一个很好的中间层。

< P>在设计模式上的这个优秀站点上。

< P> <强>外观模式:为一个复杂的子系统或一组接口提供统一的简化接口。创建一个更高级别的接口,同时将客户端与复杂的子系统分离。

一个帮助你理解的例子……一个出租车司机。你告诉出租车司机“带我去PointX”(统一的简化高级界面),然后司机开始一系列动作(转动钥匙、换档、踩油门等)来执行任务。他抽象出基础子系统(变速箱、发动机等)的复杂性这样你就不用担心他们了。 驾驶员还将您与实际使用的车辆分离……您不直接与车辆接口。您可以给他一个Merc,但您与驾驶员的接口仍然是TakeMeTo(X)…您不受任何特定车型/品牌的限制

在现实世界的示例中,您会发现facades与第三方组件或库接口。您不希望代码依赖于特定的供应商,因此引入facade接口来解耦。此外,您还将简化此接口,例如,facade接口将有一个名为SendData(string)的方法但是在内部,实现可能会以特定的顺序调用m个子包上的n个方法来完成任务

例如翻译成C++并保持它的微小< /P>

sResource = LWCPPSimple::get("http://www.perl.org")
<>这里,C++中的WWW虚拟库是一个统一了协议、网络和解析问题的方面,使我可以集中精力获取资源的主要焦点。HTTP、FTP和其他各种协议、请求响应、连接管理等。此外,如果LWCPPSimple的创建者明天找到一种方法使get()速度提高一倍,我将免费获得性能优势。我的客户端代码不必更改

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;
}

A类不会直接使用任何方法,也不会直接影响C类或B类包含的任何其他子系统的状态。此处仅显示一个子系统,因为它与子系统的数量无关。

能否提供文章的链接?编辑您的问题将对其他人更有帮助。哇,我喜欢这个解释国家。我的意思是,我知道什么是门面,但这很好。很好的解释,可以与这个代码示例答案相吻合。请停止使用类比。你可以很容易地说,类a使用类B使用类C,类a不能直接使用类C。@omouse,如果我可以否决你的评论,我会的。类比不仅是有用的aid到解释,但你对facade模式的一句话解释甚至都不正确。@Mike Daniels,它怎么不正确?你有一个类通过“简化”函数间接使用了许多其他类。类比很有用,但可能会崩溃。
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;
}
class A {
    private B b; // Class A uses Class B, the "interface"
    public int f() { return b.g(); }
};

class B {
    private C c; // class B uses class C, a "subsystem"
    private ... ...; // other subsystems can be added
    public int g() { c.h(); return c.i(); }
};

class C { // a subsystem
    public void h() { ... }
    public int i() { return x; }
};