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);    // 确认被短路的部分无法生效
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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();
 }