facade-theory-ns.cs
// Facade Pattern Judith Bishop Dec 2006
// Sets up a library of three systems, accessed through a
// Facade of two operations
// Compile with csc /t:library /out:FacadeLib.dll Facade2.cs
namespace FacadeLib {
internal class SubsystemA {
internal string A1() {
return "Subsystem A, Method A1\n";
}
internal string A2() {
return "Subsystem A, Method A2\n";
}
}
internal class SubsystemB{
internal string B1() {
return "Subsystem B, Method B1\n";
}
}
internal class SubsystemC{
internal string C1() {
return "Subsystem C, Method C1\n";
}
}
public static class Facade {
static SubsystemA a = new SubsystemA();
static SubsystemB b = new SubsystemB();
static SubsystemC c = new SubsystemC();
public static void Operation1() {
Console.WriteLine("Operation 1\n" +
a.A1() +
a.A2() +
b.B1());
}
public static void Operation2() {
Console.WriteLine("Operation 2\n" +
b.B1() +
c.C1());
}
}
}
/* Output:
Operation 1
Subsystem A, Method A1
Subsystem A, Method A2
Subsystem B, Method B1
Operation 2
Subsystem B, Method B1
Subsystem C, Method C1
*/
/*
SubsystemC x = new SubsystemC();
x.C1();
Facade2Main.cs(12,3): error CS0122: 'FacadeLib.SubsystemC' is inaccessible due to its protection level
Facade2Main.cs(12,22): error CS0122: 'FacadeLib.SubsystemC' is inaccessible due to its protection level
Facade2Main.cs(12,18): error CS0143: The type 'FacadeLib.SubsystemC' has no constructors defined
Facade2Main.cs(13,5): error CS0117: 'FacadeLib.SubsystemC' does not contain a definition for 'C1'
*/