Facade Pattern Demo

   
 

using System;
public class PizzaDelivery {
    public void GetDeliveryStuff() {
        Console.WriteLine("Pizza Delivery stuff.");
    }

    public PizzaDelivery() {}
}

public class PizzaFinance {
    public void GetPizzaFinanceStuff() {
        Console.WriteLine("Pizza Finance stuff.");
    }

    public PizzaFinance() { }
}

public class PizzaInsurance {
    public void GetPizzaInsuranceStuff() {
        Console.WriteLine("Pizza Insurance stuff.");

    }

    public PizzaInsurance() {}
}

public class PizzaOrder {
    public void GetPizzaOrderStuff() {
        Console.WriteLine("Pizza Order stuff.");
    }

    public PizzaOrder() { }
}

public class PizzaRegistration {

    public void GetPizzaRegistrationStuff() {
        Console.WriteLine("Pizza Registration stuff.");
    }

    public PizzaRegistration() {}
}


public class PizzaCooking {

    public void GetPizzaServiceStuff() {
        Console.WriteLine("Pizza Service stuff.");
    }

    public PizzaCooking() { }
}


public class DealerRepresentative {
    private PizzaDelivery delivery;
    private PizzaFinance finance;
    private PizzaInsurance insurance;
    private PizzaOrder order;
    private PizzaRegistration registration;
    private PizzaCooking service;

    public void GetPizzaUpdate() {
        this.delivery.GetDeliveryStuff();
        this.finance.GetPizzaFinanceStuff();
        this.insurance.GetPizzaInsuranceStuff();
        this.order.GetPizzaOrderStuff();
        this.registration.GetPizzaRegistrationStuff();
        this.service.GetPizzaServiceStuff();
    }

    public DealerRepresentative() {
        delivery = new PizzaDelivery();
        finance = new PizzaFinance();
        insurance = new PizzaInsurance();
        order = new PizzaOrder();
        registration = new PizzaRegistration();
        service = new PizzaCooking();
    }
}


public class Client {
    static void Main(string[] args) {
        DealerRepresentative gopher = new DealerRepresentative();
        gopher.GetPizzaUpdate();
    }
}

    


Composite Pattern Demo

   
 
using System;
using System.Text;
using System.Collections;

public abstract class Unit {
    protected string name;
    public abstract void Add(Unit e);
    public abstract void Remove(Unit e);
    public abstract void GetChild(int level);

    public Unit(string name) {
        this.name = name;
    }
}


public class Office : Unit {
    public override void Add(Unit c) {
        Console.WriteLine("Can't use 'Add' in Office!");
    }

    public override void Remove(Unit e) {
        Console.WriteLine("Can't use 'Remove' in Office! ");
    }

    public override void GetChild(int level) {
        Console.WriteLine(new string('*', level) + this.name);
    }

    public Office(string name) : base(name) {}
}


public class Branch : Unit {
    private ArrayList node = new ArrayList();

    public override void Add(Unit e) {
        node.Add(e);
    }

    public override void Remove(Unit e) {
        node.Remove(e);
    }

    public override void GetChild(int level) {
        Console.WriteLine(new String('#', level) + this.name);
        foreach (Unit e in this.node)
            e.GetChild(level + 1);

    }

    public Branch(string name) : base(name) {}
}

public class Client {
    static void Main(string[] args) {
        Branch root = new Branch("US (Root)");
        Office ny = new Office("A (Unit)");
        Office ca = new Office("B (Unit)");

        root.Add(ny);
        root.Add(ca);

        Branch rootHawaii = new Branch("Canada Branch (Branch)");
        root.Add(rootHawaii);

        Branch branchUK = new Branch("UK Branch (Branch)");
        Office ldnc = new Office("C Office (Unit)");
        Office ldnw = new Office("D Office (Unit)");
        branchUK.Add(ldnc);
        branchUK.Add(ldnw);
        root.Add(branchUK);

        Office dummy = new Office("D Office");
        ldnc.Add(dummy);

        root.GetChild(0);

        root.Remove(rootHawaii);
        branchUK.Remove(ldnc);
        Console.WriteLine("Remove Hawaii branch and London City office");
        root.GetChild(0);
    }
}

    


Chain of Responsibility Pattern

   
 

using System;
public abstract class Chain {

    protected Chain theNextInChain;
    public abstract void DealWithRequirement(string requirement);

    public void NextInChain(Chain next) {
        this.theNextInChain = next;
    }

}

public class Employee : Chain {
    public override void DealWithRequirement(string requirement) {
        switch (requirement) {
            case "Job":
                Console.WriteLine("{0} Staff", this);
                break;
            default:
                if (theNextInChain != null)
                    theNextInChain.DealWithRequirement(requirement);
                break;
        }
    }
}


public class Manager : Chain {
    public override void DealWithRequirement(string requirement) {
        switch (requirement) {
            case "Manager":
                Console.WriteLine("{0} requirement.", this);
                break;
            default:
                if (theNextInChain != null)
                    theNextInChain.DealWithRequirement(requirement);
                break;
        }
    }
}


public class Senior : Chain {
    public override void DealWithRequirement(string requirement) {
        switch (requirement) {

            default: Console.WriteLine("{0} has managed the " + requirement + " requirement.", this);
                break;
        }
    }

    public Senior() { ;}

}
class Client {
    static void Main(string[] args) {
        Chain staff = new Employee();
        Chain manager = new Manager();
        Chain seniorManager = new Senior();

        staff.NextInChain(manager);
        manager.NextInChain(seniorManager);

        staff.DealWithRequirement("Corporates");
        staff.DealWithRequirement("Job");
        staff.DealWithRequirement("Manager");
        staff.DealWithRequirement("Agency");
    }
}

    


Adapter Pattern Demo

   
 
using System;

public sealed class ForeignExchange {
    public string UStoUK() {
        return "USD to GBP is...";
    }

    public string UStoCAN() {
        return "USD to CND is...";
    }

    public ForeignExchange() { ;}
}

public class AdapterWrapper {
    private Adapter adapt;

    public string AdapterWrapper_USD_GBP() {
        return this.adapt.USD_GBP();
    }

    public string AdapterWrapper_USD_CND() {
        return this.adapt.USD_CND();
    }

    public string AdapterWrapper_USD_AUD() {
        return this.adapt.USD_AUD();
    }

    public AdapterWrapper() {
        adapt = new Adapter();
    }
}


public class Adapter {
    private ForeignExchange sourceCode;

    public string USD_GBP() {
        return "Conversion " + this.sourceCode.UStoUK();
    }

    public string USD_CND() {
        return "Conversion " + this.sourceCode.UStoCAN();
    }

    public string USD_AUD() {
        return "Conversion USD to AUD is...";
    }

    public string USD_JPY() {
        return "Conversion USD to JNY is...";
    }

    public Adapter() {
        sourceCode = new ForeignExchange();
    }
}

public class Client {

    static void Main(string[] args) {
        AdapterWrapper afx = new AdapterWrapper();
        Console.WriteLine(afx.AdapterWrapper_USD_GBP());
        Console.WriteLine(afx.AdapterWrapper_USD_CND());

        Console.WriteLine(afx.AdapterWrapper_USD_AUD());
    }
}