Dec 16 2009

Overview of the Facade Design Pattern

Category: Design Patternryancmartin1976 @ 17:50

First Strategy:

Second Strategy:

Façade Design Pattern in C#

The Façade pattern is sometimes called and written as a class manager. It's an easy way to organize and unify numerous classes usually within the same namespace and design structure.

The Façade pattern is a high level object pulling together low level objects for simplifying application complexity.

public class Evaluate

{

    public int SubmitForm()

  {

        List<IProduct> products = new List<IProduct>();

      string productToEval = "premium";

        switch (productToEval)

        {

            case "standard":

                products.Add(new StandardProduct());

                break;

            case "premium":

                products.Add(new PremiumProduct());

                break;

            case "substandard":

                products.Add(new SubStandardCentralProduct());

                products.Add(new SubStandardRemoteProduct());

                break;

            case "distributed":

                products.Add(new DistributedCentralProduct());

                products.Add(new DistributedRemoteProduct());

                break;

        }

 

        /////////////////////////////////////////////

        // THEN ADD PLUGIN PRODUCT

        /////////////////////////////////////////////

        products.Add(new IntegratedProduct(false));

        products.Add(new ExternalProduct(false));

        products.Add(new DiscontinuedProduct(false));

 

        EvalFacade evalFacade = new EvalFacade(products, userInfo);

        return evalFacade.Run();

  }

}

 

public class EvalFacade

{

    private List<IProduct> _products;

    private UserInfo _userInfo;

 

    private string _parentSerialNumber = "";

    public string ParentSerialNumber

    {

        get { return _parentSerialNumber; }

        set { _parentSerialNumber = value; }

    }

 

    public EvalFacade(List<IProduct> products, UserInfo userInfo)

    {

        _products = products;

        _userInfo = userInfo;

    }

 

    public int Run()

    {

        int status = 0;

        foreach (IProduct product in _products)

        {

            if (product != null)

            {

                product.AddLicense(_userInfo, this.ParentSerialNumber);

                status = product.AddLicenseStatus(_userInfo);

                if (status != 0)

                    return status;

                product.AddLeadIntoCRM(_userInfo, this.ParentSerialNumber);

                if (string.IsNullOrEmpty(this.ParentSerialNumber) && !string.IsNullOrEmpty(product.SerialNumber))

                    this.ParentSerialNumber = product.SerialNumber;

            }

        }

        return status;

    }

}

Tags: