Note that there are some explanatory texts on larger screens.

plurals
  1. POCan someone please critique my Factory Pattern?
    primarykey
    data
    text
    <p>I have recently been learning more about design patterns and thought I'd take a crack at it. I'm not sure if this is the correct way to use the factory pattern and was wondering if someone could provide me with feedback?</p> <p>I basically have a set of calendar items that are similar. Meals, workouts and measurements. They all have a date and a name and can print details. but other than that they have a few items they each need differently.</p> <pre><code> public enum AppointmentType { Workout, Meal, Measurement } public abstract class Appointment { public string Name { get; set; } public DateTime DateStarted { get; set; } public virtual string PrintDetails() { return string.Format("Type: {0}\nName: {1}\nDate: {2}",this.GetType().ToString(), Name, DateStarted.ToShortDateString()); } } public class Workout : Appointment { public List&lt;string&gt; Exercises { get; set; } public Workout() { Exercises = new List&lt;string&gt;(); } public override string PrintDetails() { string startInfo = base.PrintDetails(); string addedInfo = "\nToday I will be doing the following:\n"; foreach (string exercise in Exercises) { addedInfo += string.Format("{0}\n", exercise); } return startInfo + addedInfo; } } public class Meal : Appointment { public List&lt;string&gt; FoodItems { get; set; } public Meal() { FoodItems = new List&lt;string&gt;(); } public override string PrintDetails() { string startInfo = base.PrintDetails(); string addedInfo = "\nToday I will be eating the following:\n"; foreach (string foodItem in FoodItems) { addedInfo += string.Format("{0}\n", foodItem); } return startInfo + addedInfo; } } public class Measurement : Appointment { public string Height { get; set; } public string Weight { get; set; } public override string PrintDetails() { string startInfo = base.PrintDetails(); string addedInfo = string.Format("\nI am {0} feet tall and I weight {1} pounds!\n", Height, Weight); return startInfo + addedInfo; } } public interface IAppointmentFactory { Appointment CreateAppointment(AppointmentType appointmentType); } public class AppointmentFactory : IAppointmentFactory { public Appointment CreateAppointment(AppointmentType appointmentType) { switch (appointmentType) { case AppointmentType.Workout: return new Workout(); case AppointmentType.Meal: return new Meal(); case AppointmentType.Measurement: return new Measurement(); default: return new Workout(); } } } </code></pre> <p>and here is a program using the library:</p> <pre><code> class Program { public static List&lt;Appointment&gt; myAppointments; public static AppointmentFactory factory; public static Appointment myAppointment; static void Main(string[] args) { myAppointments = new List&lt;Appointment&gt;(); factory = new AppointmentFactory(); StartLoop(); } private static void StartLoop() { Console.WriteLine(string.Format("\nWelcome to Appointment App: You have {0} appointment(s)!", myAppointments.Count())); Console.WriteLine("0 = Exit"); Console.WriteLine("1 = New Workout"); Console.WriteLine("2 = New Meal"); Console.WriteLine("3 = New Measurement"); Console.WriteLine("P = Print Schedule\n"); switch (Console.ReadLine().ToUpper()) { case "0": return; case "1": CreateNewAppointment(AppointmentType.Workout); AddExercises(); break; case "2": CreateNewAppointment(AppointmentType.Meal); AddFoodItems(); break; case "3": CreateNewAppointment(AppointmentType.Measurement); GetMeasurements(); break; case "P": PrintSchedule(); break; default: return; } StartLoop(); } private static void GetMeasurements() { Console.WriteLine("How tall are you?"); ((Measurement)myAppointment).Height = Console.ReadLine(); Console.WriteLine("What is your weight?"); ((Measurement)myAppointment).Weight = Console.ReadLine(); } private static void AddFoodItems() { Console.WriteLine("How many food items do you want to add?"); string exerciseCount = Console.ReadLine(); for (int i = 0; i &lt; Convert.ToInt32(exerciseCount); i++) { Console.WriteLine(string.Format("Food {0}:", (i + 1))); ((Meal)myAppointment).FoodItems.Add(Console.ReadLine()); } } private static void AddExercises() { Console.WriteLine("How many exercises do you want to add?"); string exerciseCount = Console.ReadLine(); for (int i = 0; i &lt; Convert.ToInt32(exerciseCount); i++) { Console.WriteLine(string.Format("Exercise {0}:", (i + 1))); ((Workout)myAppointment).Exercises.Add(Console.ReadLine()); } } private static void PrintSchedule() { foreach (Appointment appointment in myAppointments) { Console.WriteLine(appointment.PrintDetails()); } } public static void CreateNewAppointment(AppointmentType appointmentType) { myAppointment = factory.CreateAppointment(appointmentType); Console.WriteLine("Name:"); myAppointment.Name = Console.ReadLine(); Console.WriteLine("Start Date:"); myAppointment.Name = Console.ReadLine(); myAppointments.Add(myAppointment); } } </code></pre> <p>Thanks!!</p> <p>-ajax</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload