Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Runtime.CompilerServices;
- namespace ConsoleApp5
- {
- class Program
- {
- static void Main(string[] args)
- {
- Console.WriteLine("Hello World!");
- new IncidentModifier(ticketNumber: "INC0000001")
- .SetShortDescription()
- .SetCaller()
- .ChangeAssignedAgent()
- .ChangeAssignmentGroup()
- .ModifyTicket();
- new IncidentCreator(caller: "Some User"
- , description: "Example description", shortDescription: "simple description")
- .ChangeAssignmentGroup()
- .ChangeAssignedAgent()
- .CreateTicket();
- }
- }
- public class BuilderBase<T> : IBuilder<T> where T : class,IBuilder<T>
- {
- public T SetDescription()
- {
- Console.WriteLine("Setting Description");
- return this as T;
- }
- public T SetShortDescription()
- {
- Console.WriteLine("Setting short description");
- return this as T;
- }
- public void FinalizeProperties()
- {
- }
- public T ChangeAssignedAgent()
- {
- Console.WriteLine("Changing Assigned Agent");
- return this as T;
- }
- public T ChangeAssignmentGroup()
- {
- Console.WriteLine("Changing Assignment Group");
- return this as T;
- }
- public T ChangeSomethingElse()
- {
- Console.WriteLine("Changing something else");
- return this as T;
- }
- }
- public interface IBuilder<T> where T : class, IBuilder<T>
- {
- T ChangeAssignedAgent();
- T ChangeAssignmentGroup();
- T ChangeSomethingElse();
- }
- internal interface IIncidentBuilder<T> where T : class, IBuilder<T>
- {
- T SetCategory();
- T SetSubcategory();
- T SetRelatedChange();
- }
- public class IncidentBuilder<T> : BuilderBase<T>, IIncidentBuilder<T> where T : class, IBuilder<T>
- {
- public IncidentBuilder()
- {
- }
- public T SetCaller()
- {
- Console.WriteLine("Setting Caller");
- return this as T;
- }
- public T SetCategory()
- {
- Console.WriteLine("Setting Category");
- return this as T;
- }
- public T SetSubcategory()
- {
- Console.WriteLine("Setting subcategory");
- return this as T;
- }
- public T SetRelatedChange()
- {
- Console.WriteLine("Setting related change");
- return this as T;
- }
- }
- public class IncidentModifier : IncidentBuilder<IncidentModifier>
- {
- private ITicketGetter getter;
- private string ticketNumber;
- public IncidentModifier(string ticketNumber)
- {
- this.ticketNumber = ticketNumber;
- getter.GetTicket(ticketNumber);
- }
- public void ModifyTicket()
- {
- getter.ModifyTicket(this);
- }
- }
- public class TickerService : ITicketGetter, ITicketCreator
- {
- public void ModifyTicket<T>(IBuilder<T> builder) where T : class, IBuilder<T>
- {
- Console.WriteLine("Modifying ticket");
- }
- public string GetTicket(string ticketNumber)
- {
- return $"Obtained ticket {ticketNumber}";
- }
- public string CreateNewTicket<T>(IBuilder<T> builder) where T : class, IBuilder<T>
- {
- return "Successfully created your ticket!";
- }
- }
- public interface ITicketCreator
- {
- string CreateNewTicket<T>(IBuilder<T> builder) where T : class, IBuilder<T>;
- }
- public interface ITicketGetter
- {
- void ModifyTicket<T>(IBuilder<T> builder) where T : class, IBuilder<T>;
- string GetTicket(string ticketNumber);
- }
- public class IncidentCreator : IIncidentBuilder<IncidentCreator>, IBuilder<IncidentCreator>
- {
- private ITicketCreator creator;
- private IncidentBuilder<IncidentCreator> builder;
- public IncidentCreator(string caller, string description, string shortDescription)
- {
- creator = new TickerService();
- builder = new IncidentBuilder<IncidentCreator>();
- builder.SetCaller();
- builder.SetDescription();
- builder.SetShortDescription();
- }
- public IncidentCreator SetCategory()
- {
- return builder.SetCategory();
- }
- public IncidentCreator SetSubcategory()
- {
- return builder.SetSubcategory();
- }
- public IncidentCreator SetRelatedChange()
- {
- return builder.SetRelatedChange();
- }
- public IncidentCreator ChangeAssignedAgent()
- {
- return builder.ChangeAssignedAgent();
- }
- public IncidentCreator ChangeAssignmentGroup()
- {
- return builder.ChangeAssignmentGroup();
- }
- public IncidentCreator ChangeSomethingElse()
- {
- return builder.ChangeSomethingElse();
- }
- public void CreateTicket()
- {
- creator.CreateNewTicket(this);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement