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