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(); } }
Design Patterns
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()); } }