用c+解释立面模式+;例子? 我已经检查过了,看起来它缺少了代码示例的C++版本。我不能完全欣赏这个外观模式没有这个,你能帮助解释它给我用C++ + < /p> < p>我做了一个搜索和替换的例子。这可能对你没有帮助,因为如果你理解C++,那么你应该能够理解C语言,因为它使用相同的构造和关键字(类、函数、命名空间、公共等) /“子系统类别A” #包括 类子系统 { 公众: void MethodOne() { std::cout
从某种意义上说,Facade只是一个API,用于希望与隐藏的东西交互的客户端用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> 外观模式:为一个复杂的子系统或一组接口提供统一的简化接口。创建一个更
当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; }
};