using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace State_VendingMachineExample { // Context internal class VendingMachine { private Product product = new Product(); internal decimal Money { get; set; } internal VMState State { get; set; } internal VMState ReadyState { get; private set; } internal VMState HasMoneyState { get; private set; } internal VMState DispenseItemState { get; private set; } internal VMState DispenseChangeState { get; private set; } public VendingMachine() { this.Money = 0; this.ReadyState = new ReadyState(this); this.HasMoneyState = new HasMoneyState(this); this.DispenseItemState = new DispenseItemState(this); this.DispenseChangeState = new DispenseChangeState(this); this.State = this.ReadyState; } public void AddMoney(decimal money) { this.State.AddMoney(money); } public void SelectItem(int itemId) { this.State.SelectItem(itemId); } internal decimal? GetPrice(int itemId) { return product.GetPrice(itemId); } } }