public void Test() { // 生成操作对象实例 IHandler handler1 = new InternalHandler(); IHandler handler2 = new DiscountHandler(); IHandler handler3 = new MailHandler(); IHandler handler4 = new RegularHandler(); // 组装链式的结构 internal-> mail-> discount-> regular-> null handler1.Successor = handler3; handler3.Successor = handler2; handler2.Successor = handler4; IHandler head = handler1; Request request = new Request(20, PurchaseType.Mail); head.HandleRequest(request); Assert.AreEqual <double>(20 * 1.3, request.Price); // 重新组织链表结构 handler1.Successor = handler1.Successor.Successor; // 短路掉Discount request = new Request(20, PurchaseType.Discount); head.HandleRequest(new Request(20, PurchaseType.Discount)); Assert.AreEqual <double>(20, request.Price); // 确认被短路的部分无法生效 }
/// <summary> /// Returns the right FileHandler according to specified file. /// </summary> /// <param name="fileName">file name</param> /// <returns>RegulardHandler instance if it's from an unsupported type</returns> public static FileHandler GetHandler(string fileName) { // TDU File TduFile tduFile = TduFile.GetFile(fileName); FileHandler handler = new RegularHandler(); // New mapping management // DB if (Regex.IsMatch(fileName, DB.FILENAME_PATTERN, RegexOptions.IgnoreCase)) { handler = new DBHandler(); } // BNK else if (Regex.IsMatch(fileName, BNK.FILENAME_PATTERN, RegexOptions.IgnoreCase)) { handler = new BNKHandler(); } // DDS else if (Regex.IsMatch(fileName, DDS.FILENAME_PATTERN, RegexOptions.IgnoreCase)) { handler = new DDSHandler(); } // 2DB else if (Regex.IsMatch(fileName, _2DB.FILENAME_PATTERN, RegexOptions.IgnoreCase)) { handler = new _2DBHandler(); } // MAP else if (Regex.IsMatch(fileName, MAP.FILENAME_PATTERN, RegexOptions.IgnoreCase)) { handler = new MAPHandler(); } // PCH else if (Regex.IsMatch(fileName, PCH.FILENAME_PATTERN, RegexOptions.IgnoreCase)) { handler = new PCHHandler(); } // DB Resources else if (Regex.IsMatch(fileName, DBResource.FILENAME_PATTERN, RegexOptions.IgnoreCase)) { handler = new DBResourceHandler(); } // DFE/IGE /*else if (Regex.IsMatch(fileName, DFE.FILENAME_PATTERN, RegexOptions.IgnoreCase) || Regex.IsMatch(fileName, IGE.FILENAME_PATTERN, RegexOptions.IgnoreCase)) || handler = new TrackHandler();*/ handler._TheTDUFile = tduFile; return(handler); }
public void Test() { // 生成操作对象实例 IHandler handler1 = new InternalHandler(); IHandler handler2 = new DiscountHandler(); IHandler handler3 = new MailHandler(); IHandler handler4 = new RegularHandler(); //// 组装链式的结构 internal-> mail-> discount-> regular-> null handler1.AddSuccessor(handler2); handler2.AddSuccessor(handler3); handler2.AddSuccessor(handler4); IHandler head = handler1; Request request = new Request(20, PurchaseType.Mail); head.HandleRequest(request); Assert.AreEqual <double>(20 * 1.3, request.Price); }
static void Main(string[] args) { IHandler handler1 = new InternalHandler(); IHandler handler2 = new DiscountHandler(); IHandler handler3 = new MailHandler(); IHandler handler4 = new RegularHandler(); handler1.Next = handler3; handler3.Next = handler2; handler2.Next = handler4; IHandler head = handler1; Request request = new Request(20, PurchaseType.Mail); head.HandleRequest(request); Console.Write(request.Price); //26 //将MailHandler短路 handler1.Next = handler1.Next.Next; request = new Request(20, PurchaseType.Mail); head.HandleRequest(request); Console.Write(request.Price); //20 }
public void Test() { // 生成操作对象实例、组装链式结构 IHandler handler1 = new InternalHandler(); IHandler handler2 = new DiscountHandler(); IHandler handler3 = new MailHandler(); IHandler handler4 = new RegularHandler(); handler1.Successor = handler3; handler3.Successor = handler2; handler2.Successor = handler4; IHandler head = handler1; handler1.HasBreakPoint = true; handler1.Break += this.Break; handler3.HasBreakPoint = true; handler3.Break += this.Break; Request request = new Request(20, PurchaseType.Regular); head.HandleRequest(request); currentType = PurchaseType.Internal; // 为第一个断点做的准备 Assert.AreEqual <double>(20, request.Price); }
public void BeforeEachTest() { _sut = new RegularHandler(); }