Code in C#:
namespace
Facade_DesignPattern
{
using System;
class SubSystem_class1
{
public void OperationX()
{
Console.WriteLine("SubSystem_class1.OperationX called");
}
}
class SubSystem_class2
{
public void OperationY()
{
Console.WriteLine("SubSystem_class2.OperationY called");
}
}
class SubSystem_class3
{
public void OperationZ()
{
Console.WriteLine("SubSystem_class3.OperationZ called");
}
}
class Facade
{
private SubSystem_class1 c1 = new SubSystem_class1();
private SubSystem_class2 c2 = new SubSystem_class2();
private SubSystem_class3 c3 = new SubSystem_class3();
public void OperationWrapper()
{
Console.WriteLine("The Facade OperationWrapper carries out complex decision-making");
Console.WriteLine("which in turn results in calls to the subsystem classes");
c1.OperationX();
if (1==1 /*some really complex decision*/)
{
c2.OperationY();
}
// lots of complex code here . . .
c3.OperationZ();
}
}
///<summary>
/// Summary description for Client.
///</summary>
public class Client
{
public static int Main(string[] args)
{
Facade facade = new Facade();
Console.WriteLine("Client calls the Facade OperationWrapper");
facade.OperationWrapper();
return 0;
}
}
}
Code in SOME:
CSubSystem_class1
OperationX()
CSubSystem_class2
OperationY()
CSubSystem_class3
OperationZ()
CFacade ->CSubSystem_class1[_c1.()],->CSubSystem_class2[_c2.()],->CSubSystem_class3[_c3.()]
OperationWrapper()
CClient
main
CClient.main
{
CFacade facade.();
facade.OperationWrapper()
{
_c1.OperationX();
<%if (1==1 /*some really complex decision*/)%>
<%{%>
_c2.OperationY();
<%}%>
_c3.OperationZ();
};
}