W tym poście chciałbym opisać wzorzec projektowy fasada.
Głównym zadaniem fasady jest uproszczenie bardziej zaawansowanej części całego systemu. Uproszczenie polega na odizolowaniu części systemu w osobnej klasie.
Poniżej prosty przykład fasady obsługującej trzy klasy wykonujące operacje dodawania, odejmowania oraz mnożenia podanych wartości.
- public class Facade
- {
- protected AddData addData;
- protected SubstractData substractData;
- protected MultipleData multipleData;
- public Facade(AddData addData, SubstractData substractData, MultipleData multipleData)
- {
- this.addData = addData;
- this.substractData = substractData;
- this.multipleData = multipleData;
- }
- public void MakeCalculation(int val1, int val2)
- {
- Console.WriteLine(addData.GetOperationVal(val1, val2));
- Console.WriteLine(substractData.GetOperationVal(val1, val2));
- Console.WriteLine(multipleData.GetOperationVal(val1, val2));
- }
- }
- public class AddData
- {
- public int GetOperationVal(int val1, int val2)
- {
- return addData(val1, val2);
- }
- private int addData(int val1, int val2)
- {
- return (val1 + val2);
- }
- }
- public class SubstractData
- {
- public int GetOperationVal(int val1, int val2)
- {
- return substractData(val1, val2);
- }
- private int substractData(int val1, int val2)
- {
- return (val1 - val2);
- }
- }
- public class MultipleData
- {
- public int GetOperationVal(int val1, int val2)
- {
- return multipleData(val1, val2);
- }
- private int multipleData(int val1, int val2)
- {
- return (val1 * val2);
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- AddData _addData = new AddData();
- SubstractData _substractData = new SubstractData();
- MultipleData _multipleData = new MultipleData();
- Facade facade = new Facade(_addData, _substractData, _multipleData);
- facade.MakeCalculation(30, 15);
- Console.ReadKey();
- }
- }
Najpierw tworzone są obiekty klas, które są przekazywane do fasady, gdzie następuje wykonanie obliczeń dla wszystkich z nich. Można to również wykonać przez przeniesienie tworzenia obiektu bezpośrednio do fasady, przez co kod zostaje bardziej uproszczony.
- public class Facade
- {
- protected AddData addData;
- protected SubstractData substractData;
- protected MultipleData multipleData;
- public Facade()
- {
- this.addData = new AddData();
- this.substractData = new SubstractData();
- this.multipleData = new MultipleData();
- }
- public void MakeCalculation(int val1, int val2)
- {
- Console.WriteLine(addData.GetOperationVal(val1, val2));
- Console.WriteLine(substractData.GetOperationVal(val1, val2));
- Console.WriteLine(multipleData.GetOperationVal(val1, val2));
- }
- }
- public class AddData
- {
- public int GetOperationVal(int val1, int val2)
- {
- return addData(val1, val2);
- }
- private int addData(int val1, int val2)
- {
- return (val1 + val2);
- }
- }
- public class SubstractData
- {
- public int GetOperationVal(int val1, int val2)
- {
- return substractData(val1, val2);
- }
- private int substractData(int val1, int val2)
- {
- return (val1 - val2);
- }
- }
- public class MultipleData
- {
- public int GetOperationVal(int val1, int val2)
- {
- return multipleData(val1, val2);
- }
- private int multipleData(int val1, int val2)
- {
- return (val1 * val2);
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- Facade facade = new Facade();
- facade.MakeCalculation(30, 15);
- Console.ReadKey();
- }
- }