using System;
using System.Collections;
//product
public class Computer
{private string Type;
private Hashtable info=new Hashtable ();
public Computer(string type)
{ Type=type;
Console .WriteLine ("Conputer "+type+" is Builded!");
}
public string this[string key]
{ get
{ return (string)info[key];
}
set
{ info[key]=value;
}
}
public void Show()
{Console .WriteLine ("this is a computer of "+Type+" :");
Console .WriteLine (" "+info["cpu"]);
Console .WriteLine (" "+info["ram"]);
}
}
//Builder
public abstract class Builder
{ protected Computer computer;
public Computer Computpter
{ get
{ return computer;
}
}
public Builder(string type)
{computer=new Computer (type);
}
abstract public void BuildCpu();
abstract public void BuilderRam();
}
public class MacBuilder:Builder
{ public MacBuilder(string type):base(type)
{}
public override void BuildCpu()
{ computer["cpu"]="MacCpu";
}
public override void BuilderRam()
{ computer["ram"]="MacCpu";
}
}
public class pcBuilder:Builder
{ public pcBuilder(string type):base(type)
{}
public override void BuildCpu()
{computer["cpu"]="pcCpu";
}
public override void BuilderRam()
{computer["ram"]="pcCpu";
}
}public class Worker
{ public void Construct(Builder builder)
{ builder.BuildCpu();
builder.BuilderRam();
}
}
public class CEO
{ public static void Main()
{ try
{ Worker Worker=new Worker ();
Builder PcBuilder=new pcBuilder ("Pc");
Builder MacBuilder=new MacBuilder ("Mac");
Worker .Construct(PcBuilder);
Worker.Construct(MacBuilder);
PcBuilder.Computpter.Show ();
MacBuilder.Computpter.Show ();
}
catch(Exception ex)
{
Console.WriteLine ("Error:"+ex.Source+" "+ex.InnerException+ex.StackTrace+ex.TargetSite);
}
}
}