コード例 #1
0
 public override int getDelivery(CopyMachineContext c)
 {
     Console.WriteLine($"Получаем сдачу ({c.money}$) и уходим");
     c.money  = 0;
     c.device = null;
     c.state  = new RunState();
     return(c.money);
 }
コード例 #2
0
 public virtual void Run(CopyMachineContext c)
 {
     Console.WriteLine($"Срочно убегаем! Оставляем все!");
     c.money   = 0;
     c.DocName = "";
     c.device  = null;
     c.state   = new RunState();
 }
コード例 #3
0
        static void Main(string[] args)
        {
            var machineContext = new CopyMachineContext(10);    //наверное тут лучше использовать StateBuilder

            //нормальная работа                                 //тогда легче конструировать, нужны будут try/catch
            machineContext.ChooseDevice(new USB());
            machineContext.ChooseDocument("instruction.pdf");
            machineContext.PrintDocument();
            machineContext.getDelivery();
            Console.WriteLine("---------------------------");

            //ненормальная работа1
            try {
                machineContext.EnterMoney(5);
                machineContext.ChooseDevice(new WiFi());
                machineContext.ChooseDocument("Введение.docx");
                machineContext.PrintDocument();
                machineContext.getDelivery();
                Console.WriteLine("---------------------------");
            }
            catch (Exception ex) {
                Console.WriteLine(ex.Message);
            }
            machineContext.EnterMoney(9);
            machineContext.ChooseDevice(new WiFi());
            machineContext.ChooseDocument("Введение.docx");
            machineContext.PrintDocument();
            machineContext.ChooseDocument("Заключение.docx");
            machineContext.PrintDocument();
            machineContext.getDelivery();
            machineContext.Run();
            Console.WriteLine("---------------------------");

            //ненормальная работа2
            try {
                machineContext.EnterMoney(7);
                machineContext.ChooseDevice(new USB());
                machineContext.ChooseDocument("Док1.docx");
                machineContext.PrintDocument();
                machineContext.ChooseDocument("Док2.docx");
                machineContext.PrintDocument();
                machineContext.getDelivery();
            }
            catch (Exception ex) {
                Console.WriteLine(ex.Message);
            }
            machineContext.EnterMoney(7);
            machineContext.ChooseDevice(new USB());
            machineContext.ChooseDocument("Док2.docx");
            machineContext.PrintDocument();
            machineContext.getDelivery();

            Console.Read();
        }
コード例 #4
0
 public override void ChooseDevice(CopyMachineContext c)
 {
     Console.WriteLine($"Выбираем устройство {c.device.type}");
     if (c.money < 7)
     {
         Console.WriteLine($"Недостаточно средств! Нужно еще {7-c.money} $");
     }
     else
     {
         c.state = new DeviceState();
     }
 }
コード例 #5
0
 public override void PrintDocument(CopyMachineContext c)
 {
     if (c.money != 0)
     {
         c.money = c.money - 7;
         Console.WriteLine($"Печатаем документ {c.DocName}");
         c.state = new PrintState();
     }
     else
     {
         c.state = new RunState();
         throw new Exception("Не хватает средств!");
     }
 }
コード例 #6
0
 public override void PrintDocument(CopyMachineContext c)
 {
     throw new Exception("Error! Не выбран документ!");
 }
コード例 #7
0
 public override void ChooseDevice(CopyMachineContext c)
 {
 }
コード例 #8
0
 public override void ChooseDocument(CopyMachineContext c)
 {
     Console.WriteLine($"Выбираем документ {c.DocName}");
     c.state = new DocumentState();
 }
コード例 #9
0
 public override void ChooseDocument(CopyMachineContext c)
 {
     throw new Exception("Error!");
 }
コード例 #10
0
 public override int getDelivery(CopyMachineContext c)
 {
     throw new Exception("Error!");
 }
コード例 #11
0
 public override void ChooseDocument(CopyMachineContext c)
 {
 }
コード例 #12
0
 public virtual void EnterMoney(CopyMachineContext c)
 {
     Console.WriteLine($"Вносим. Текущая сумма {c.money}$");
     c.state = new DeviceState();
 }
コード例 #13
0
 public override void ChooseDevice(CopyMachineContext c)
 {
     Console.WriteLine("Подождите, печатается документ...");
 }
コード例 #14
0
 public abstract void PrintDocument(CopyMachineContext c);
コード例 #15
0
 public override void EnterMoney(CopyMachineContext c)
 {
     Console.WriteLine($"Вносим деньги ({c.money}) для копирования");
     c.state = new EnterMoneyState();
 }
コード例 #16
0
 public abstract void ChooseDevice(CopyMachineContext c);
コード例 #17
0
 public override void Run(CopyMachineContext c)
 {
     Console.WriteLine("...");
 }
コード例 #18
0
 public override void PrintDocument(CopyMachineContext c)
 {
     throw new Exception("Бежим куда то");
 }
コード例 #19
0
 public override int getDelivery(CopyMachineContext c)
 {
     throw new Exception("Бежим куда то");
 }
コード例 #20
0
 public override int getDelivery(CopyMachineContext c)
 {
     throw new Exception("Error! Не выбран документ!");
 }
コード例 #21
0
 public abstract int getDelivery(CopyMachineContext c);
コード例 #22
0
 public override void ChooseDevice(CopyMachineContext c)
 {
     throw new Exception("Error! Уже выбран документ!");
 }
コード例 #23
0
 public override void PrintDocument(CopyMachineContext c)
 {
     Console.WriteLine("Подождите, печатается документ...");
 }
コード例 #24
0
 public abstract void ChooseDocument(CopyMachineContext c);
コード例 #25
0
 public override void ChooseDevice(CopyMachineContext c)
 {
     throw new Exception("Бежим куда то");
 }