We can quickly test the code we just implemented by adding the following client script to a GameObject in an empty Unity scene:
using UnityEngine;
namespace Chapter.Facade
{
public class ClientFacade : MonoBehaviour
{
private BikeEngine _bikeEngine;
void Start()
{
_bikeEngine =
gameObject.AddComponent<BikeEngine>();
}
void OnGUI()
{
if (GUILayout.Button("Turn On"))
_bikeEngine.TurnOn();
if (GUILayout.Button("Turn Off"))
_bikeEngine.TurnOff();
if (GUILayout.Button("Toggle Turbo"))
_bikeEngine.ToggleTurbo();
}
}
}
In the client class, we see that it's not aware of the engine's inner workings, and this is the effect we want to achieve when using the Facade pattern. The only thing the client class knows is that it can start and stop the engine and toggle on a turbocharged...