Esempio n. 1
0
    public static void Main2(string[] args)
    {
        CashContext cc    = null;
        string      input = "Normal";

        switch (input)
        {
        case "Normal":
            cc = new CashContext(new CashNormal());
            break;

        case "300 Return 100":
            cc = new CashContext(new CashReturn("300", "100"));
            break;

        case "80% discount":
            cc = new CashContext(new CashRebate("0.8"));
            break;
        }
        double total       = 0.0d;
        double totalPrices = cc.GetResult(288 * 3);

        total += totalPrices;
        Console.WriteLine("Result2 : {0}", total);
    }
        static void Main(string[] args)
        {
            CashContext csuper = new CashContext("打8折");
            var         result = csuper.GetResult(300);

            Console.WriteLine(result);
            Console.ReadLine();
        }
Esempio n. 3
0
        public void CashNormalStrategyTestMethod()
        {
            double money = 999;

            CashContext context = new CashContext(new CashNormal());

            Assert.AreEqual(money, context.GetResule(money));
        }
Esempio n. 4
0
        public void cashRebateTest()
        {
            CashContext cc;
            double      totalPrice = 0d;

            cc         = new CashContext("cashRebate");
            totalPrice = cc.GetResult(700);
            Assert.AreEqual(560, totalPrice);
        }
Esempio n. 5
0
        public void NormalTest()
        {
            CashContext cc;
            double      totalPrice = 0d;

            cc         = new CashContext("normal");
            totalPrice = cc.GetResult(700);
            Assert.AreEqual(700, totalPrice);
        }
Esempio n. 6
0
        public void CashRebateStrategyTestMethod()
        {
            double money = 999;

            double rebate = 0.95d;

            CashContext context = new CashContext(new CashRebate(rebate));

            Assert.AreEqual(money * rebate, context.GetResule(money));
        }
Esempio n. 7
0
        private void button1_Click(object sender, EventArgs e)
        {
            //CashSuper cs = CashFactory.createCashAccept(cboType.SelectedItem.ToString());
            //double result = cs.acceptCash(double.Parse(tbxPrice.Text) * double.Parse(tbxUnit.Text));
            //MessageBox.Show(result.ToString());

            CashContext cc     = new CashContext(cboType.SelectedItem.ToString());
            double      result = cc.GetResult(double.Parse(tbxPrice.Text) * double.Parse(tbxUnit.Text));

            MessageBox.Show(result.ToString());
        }
Esempio n. 8
0
        public void CashReturnStrategyTestMethod()
        {
            double money = 999;

            double      condition = 100d;
            double      _return   = 10;
            CashContext context   = new CashContext(new CashReturn(condition, _return));
            double      expected  = money < condition ? money : money - Math.Floor(money / condition) * _return;

            Assert.AreEqual(expected, context.GetResule(money));
        }
Esempio n. 9
0
        private void bt_count_Click(object sender, EventArgs e)
        {
            CashContext csuper      = new CashContext(cbx_Type.SelectedItem.ToString());
            double      totalPrices = 0d;

            totalPrices = csuper.GetResult(Convert.ToDouble(tb_Price.Text) * Convert.ToDouble(tb_Num.Text));

            total = total + totalPrices;
            lbx_List.Items.Add("单价:" + tb_Price.Text + "数量:" + tb_Num.Text + " " + cbx_Type.SelectedItem + "合计:" + totalPrices.ToString());

            cb_Result.Text = total.ToString();
        }
Esempio n. 10
0
        private void button1_Click(object sender, EventArgs e)
        {
            CashContext context     = new CashContext(comboBox1.SelectedItem.ToString());
            double      totalPrices = 0d;

            totalPrices = context.GetResult(Convert.ToDouble(textBox1.Text) * Convert.ToDouble(textBox2.Text));

            total += totalPrices;
            listBox1.Items.Add(string.Format("单价:{0} 数量:{1} 合计:{2}", textBox1.Text, textBox2.Text, totalPrices));

            label4.Text = "总计:" + total;
        }
Esempio n. 11
0
        static void Main(string[] args)
        {
            double      money       = 350;//商品原价
            CashContext cashContext = new CashContext("正常收费");

            Console.WriteLine("正常收费的价格:" + cashContext.GetResult(money));

            cashContext = new CashContext("打8折");
            Console.WriteLine("打8折收费的价格:" + cashContext.GetResult(money));

            cashContext = new CashContext("满300返100");
            Console.WriteLine("满300返100收费的价格:" + cashContext.GetResult(money));

            Console.ReadKey();
        }
Esempio n. 12
0
        static void Main(string[] args)
        {
            CashContext context1 = new CashContext(CashTypes.Nommarl);

            Console.WriteLine("应收金额:" + context1.GetRealMoney(100));

            CashContext context2 = new CashContext(CashTypes.Discount);

            Console.WriteLine("应收金额:" + context2.GetRealMoney(100));

            CashContext context3 = new CashContext(CashTypes.Return);

            Console.WriteLine("应收金额:" + context3.GetRealMoney(300));
            Console.ReadKey();
        }
Esempio n. 13
0
        private void Comfirm_Click(object sender, RoutedEventArgs e)
        {
            /*
             * _CashSuper = CashFactoy.createCashAccept(SelectType.Text);
             * double TotalPrice = _CashSuper.acceptCash(double.Parse(Price.Text) * double.Parse(Amount.Text));
             * total = total + TotalPrice;
             * Messageall.Text += "單價:" + Price.Text + " 數量:" + Amount.Text + " " + SelectType.Text +"\r\n";
             * TotalText.Content ="總計 : "+ total.ToString();
             */

            CashContext _CashContext = new CashContext(SelectType.Text);
            double      TotalPrice   = _CashContext.GetResult(double.Parse(Price.Text) * double.Parse(Amount.Text));

            total             = total + TotalPrice;
            Messageall.Text  += "單價:" + Price.Text + " 數量:" + Amount.Text + " " + SelectType.Text + "\r\n";
            TotalText.Content = "總計 : " + total.ToString();
        }
Esempio n. 14
0
        /// <summary>
        /// 策略模式
        /// </summary>
        static void TestStrategy()
        {
            Console.WriteLine("单价:");
            string price = Console.ReadLine();

            Console.WriteLine("数量:");
            string num = Console.ReadLine();

            Console.WriteLine("类型:");
            string cashType = Console.ReadLine();

            double      totalPrices = 0d;
            CashContext csuper      = new CashContext(cashType);

            totalPrices = csuper.GetResult(Convert.ToDouble(price) * Convert.ToDouble(num));
            Console.WriteLine(totalPrices);
        }
Esempio n. 15
0
        static void Main(string[] args)
        {
            CashContext cc;
            double      totalPrice = 0d;

            cc         = new CashContext("normal");
            totalPrice = cc.GetResult(700);
            Console.WriteLine("Normal Total Price: {0}", totalPrice);

            cc         = new CashContext("cashRetuen");
            totalPrice = cc.GetResult(700);
            Console.WriteLine("CashRetuen Total Price: {0}", totalPrice);

            cc         = new CashContext("cashRebate");
            totalPrice = cc.GetResult(700);
            Console.WriteLine("CashRebate Total Price: {0}", totalPrice);
        }
Esempio n. 16
0
        private static void TestStrategy()
        {
            var stragetyArray = new[]
            {
                CashContext.CashContextType.Normal,
                CashContext.CashContextType.EightFold,
                CashContext.CashContextType.MaxReturn
            };
            var random = new Random();

            for (var i = 0; i < 100; i++)
            {
                var enumVal     = stragetyArray[random.Next(stragetyArray.Length)];
                var cashContext = new CashContext(enumVal);
                var money       = random.Next(500);
                Console.WriteLine($"结算方式:{GetEnumDes(enumVal)} ,原价{money},实际收取:{cashContext.AcceptCash(money)}");
            }
        }
Esempio n. 17
0
 public static void Main2(string[] args)
 {
     CashContext cc = null;
     string input = "Normal";
     switch (input){
         case "Normal":
             cc = new CashContext(new CashNormal());
             break;
         case "300 Return 100":
             cc = new CashContext(new CashReturn("300", "100"));
             break;
         case "80% discount":
             cc = new CashContext(new CashRebate("0.8"));
             break;
     }
     double total = 0.0d;
     double totalPrices = cc.GetResult(288 * 3);
     total += totalPrices;
     Console.WriteLine("Result2 : {0}", total);
 }
Esempio n. 18
0
        private void btnOK_Click(object sender, EventArgs e)
        {
            try
            {
                var Price  = Convert.ToDouble(tboxPrice.Text.Trim());
                var Number = Convert.ToDouble(tboxNumber.Text.Trim());
                var Money  = Price * Number;


                //简单工厂
                //Money = CashFactory.CreateCashAccecpt(cboxDiscount.SelectedItem.ToString()).AcceptCash(Money);

                //工厂+策略
                Money = new CashContext(cboxDiscount.SelectedItem.ToString()).GetResult(Money);

                TotalPrice += Money;
                listBoxMain.Items.Add($"单价:{Price} 数量:{Number} 合计:{Money}");
                laTotalPrice.Text = TotalPrice.ToString();
            }
            catch (Exception ex)
            {
                MessageBox.Show("输入正确数字" + ex.Message);
            }
        }
Esempio n. 19
0
        static void Main(string[] args)
        {
            double total = 0;
            string add   = "add";

            while (add == "add")
            {
                Console.Write("Please input the price: ");
                double price = Convert.ToDouble(Console.ReadLine());

                Console.Write("Please input the number: ");
                double number = Convert.ToDouble(Console.ReadLine());

                Console.Write("Please input the discount: 0/满百返百/8折 ");
                string discount = Console.ReadLine();

                // CashSuper cashsuper = CashFactory.createCashAccept(discount);

                CashContext cashsuper = new CashContext(discount);

                double totalPrice = 0;

                totalPrice = cashsuper.GetResult(price * number);

                total += totalPrice;

                Console.Write("Price: " + price + ", ");
                Console.Write("Number: " + number + ", ");
                Console.Write("Discount: " + discount + ", ");
                Console.Write("The totalPrice is: " + totalPrice);
                Console.WriteLine("\nThe total price is: " + total);

                Console.Write("Add more items or checkout? (add/check)");
                add = Console.ReadLine();
            }
        }
Esempio n. 20
0
 // 用商場收銀系統 策略與簡單工廠結合
 // 1.策略模式是一種定義一系列演算法的方法。從概念上來看,所有這些演算法完成的都是相同的工作,只能實現不同,
 // 它可以以相同的方法調用所有的演算法,減少了各種演算法類別與使用演算法類別之間的耦合[DPE]
 // 2.策略模式的優點是簡化了單元測試,因為每個演算法都有自己的類別,可以透過自己的介面單獨測試[DPE]
 // 3.當不同的行為堆切在一個類別中時,就很難避免使用條件敘述來選擇合適的行為。將這些行為封裝在一個個獨立的Strategy類別中,可以在這些行為的類別中消除條件敘述[DP]
 // 4.策略模式就是用來封裝演算法的,但在實踐中,我們發現可以用它來封裝幾乎任何類型的規則,只要在分析過程中聽到需要在不同時間應用不同的業務規則
 // 就可以考慮使用策略模式處理這種變化的可能性[DPE]
 // 5.在基本的策略模式中,選擇所用具體實現的職責由用戶端物件承擔,並轉給策略模式的Context物件[DPE]
 public void StrategyPatternV2(string type)
 {
     CashContext context = new CashContext(type);
 }
Esempio n. 21
0
        static void Main(string[] args)
        {
            #region 工厂方法
            double total = 0.0d;
            CashContext cc = new CashContext(new CashNormal());
            total = cc.GetResult(100.04);
            cc = new CashContext(new CashRebate("0.8"));
            total = cc.GetResult(100.04);
            Console.WriteLine(total);
            #endregion

            #region 装饰器方法
            Decorator.Component person = new Decorator.Component("xiaocai");

            Tshirt tshirt = new Tshirt();
            BigTrouser bt = new BigTrouser();

            bt.Decorator(person);
            tshirt.Decorator(bt);
            tshirt.show();

            Console.WriteLine("*****************************");
            #endregion

            #region 代理方法
            SchoolGirl sg = new SchoolGirl();
            sg.Name = "李娇骄";
            Proxy.Proxy daili = new Proxy.Proxy(sg);
            daili.GiveDolls();
            daili.GiveFlowers();
            #endregion

            #region 原型模式
            ConcretePrototype1 p1 = new ConcretePrototype1("123");
            ConcretePrototype1 c1 = (ConcretePrototype1)p1.Clone();
            Console.WriteLine("Cloned :"+c1.Id);

            Resume a = new Resume("Andy");
            a.setInfo("Man", "24");
            a.setWorkExperience("1998-2005","IBM ");
            Resume b = (Resume)a.Clone();
            b.setWorkExperience("2002-2005", "Dell");
            a.display();
            b.display();
            #endregion

            #region 模板模式
            Console.WriteLine("Student A testPaper:");
            TestPaperA testA = new TestPaperA();
            testA.Test1();
            testA.Test2();
            Console.WriteLine("Student B testPaper:");
            TestPaperB testB = new TestPaperB();
            testB.Test1();
            testB.Test2();
            #endregion

            #region 抽象工厂方法
            User user = new User();

            IFactory factory = new SqlServerFactory();
            IUser iu = factory.CreateUser();
            //IUser riu = (IUser)Assembly.Load("AbstractFactory").CreateInstance("SqlserverUser");
            //反射
            //Assembly.Load("程序集名称").CreateInstance("程序集名称.类名称");
            iu.Insert(user);
            iu.GetUser(1);
            #endregion

            #region Facade 外观模式
            Fund jijin = new Fund();
            jijin.BuyFund();
            jijin.sellFund();
            #endregion

            #region 建造者模式
            Director director = new Director();
            abstractBuilder builder1 = new Builder1();
            abstractBuilder builder2 = new BuilderB();
            director.Construct(builder1);
            Builder.Builder b1 = builder1.getBuilder();
            b1.show();

            director.Construct(builder2);
            Builder.Builder b2 = builder2.getBuilder();
            b2.show();
            #endregion
            #region 观察者模式
            Observer.ConcreteSubject s = new Observer.ConcreteSubject();
            s.Attach(new Observer.ConcreteObserver(s, "x"));
            s.Attach(new Observer.ConcreteObserver(s, "y"));
            s.SubjectState = "ABC";
            s.Notify();
            ///下面是使用委托
            ///委托就是一种引用方法的类型。一旦为委托分配了方法,委托将于该方法具有完全相同的行为。
            ///委托方法的使用可以像其他的方法一样具有参数和返回值。委托可以看作是对函数的抽象,是函数的”类“,委托的实例将代表一个具体的函数
            ///一个委托可以搭载多个方法,所有方法被依次唤起,委托搭载的方法不需要属于同一个类,只需要具有相同的原型和形式,也就是拥有相同的参数列表和返回类型。
            ///在使用带参数的委托时,只需要在声明事件的地方将参数传递给事件。在绑定时将调用的方法绑定给事件。
            Bosscs boss = new Bosscs();
            StockObserver tongshi1 = new StockObserver("tongshi1",boss);
            NBAObserver tongshiNBA = new NBAObserver("tongshiNBA", boss);
            boss.Update += new EventHandler1(tongshi1.CloseStockMarket);
            boss.Update += new EventHandler1(tongshiNBA.CloseStockMarket);
            boss.update2 += new EventHandler2(tongshiNBA.print);
            boss.SubjectState = " I am back ";
            boss.Notify();
            #endregion

            #region 状态模式
            State.Context c = new State.Context(new CreateStateA());
            c.Request();
            c.Request();
            c.Request();
            c.Request();

            #endregion

            #region 备忘录模式
            Originator o = new Originator();
            o.State = "On";
            o.Show();
            Caretaker care = new Caretaker();
            care.Memento = o.CreateMemento();
            o.State = "Off";
            o.Show();

            o.SetMemento(care.Memento);
            o.Show();

            GameRole gameRole = new GameRole();
            gameRole.GetInitState();
            gameRole.StateDisplay();

            RoleStateManager stateManager = new RoleStateManager();
            stateManager.Memento = gameRole.SaveState();

            gameRole.Fight();
            gameRole.StateDisplay();

            gameRole.RecoveryState(stateManager.Memento);
            gameRole.StateDisplay();
            #endregion

            #region 组合模式
            Composite.Composite root = new Composite.Component("root");
            root.Add(new Leaf("Leaf A"));
            root.Add(new Leaf("Leaf B"));

            Composite.Composite comp = new Composite.Component("comp X");
            comp.Add(new Leaf("Leaf XA"));
            comp.Add(new Leaf("Leaf XB"));
            root.Add(comp);

            Composite.Composite comp2 = new Composite.Component("Comp X2");
            comp2.Add(new Leaf("Leaf X2A"));
            comp2.Add(new Leaf("Leaf X2B"));
            comp.Add(comp2);

            root.Add(new Leaf("Leaf C"));
            Leaf leaf = new Leaf("Leaf D");

            root.Add(leaf);
            root.Display(1);
            root.Remove(leaf);
            root.Display(1);
            #endregion

            #region 迭代器模式
            ConCreteAggregate aggregate = new ConCreteAggregate();
            aggregate[0] = "大鸟";
            aggregate[1] = "小菜";
            aggregate[2]="行李";
            aggregate[3] = "老外";
            aggregate[4] = "小偷";
            Iterator.Iterator myIterator = new ConCreteIterator(aggregate);
            object item = myIterator.First();
            while (!myIterator.IsDone())
            {
                Console.WriteLine(myIterator.CurrentItem() + "请买车票");
                myIterator.Next();
            }
            #endregion

            #region 单例模式
             //所有类都有构造方法,不编码则默认生成空的构造方法,若有显示定义的构造方法,默认的构造方法就会失效。只要将构造方法改写为私有的,外部的程序就不能通过new 来初始化它。
            //通过一个共有的方法来返回类的实例。
            Singleton.Singleton s1 = Singleton.Singleton.GetInstance();
            Singleton.Singleton s2 = Singleton.Singleton.GetInstance();

            if (s1 == s2)
            {
                Console.WriteLine("两个对象是相同的实例。");
            }

            #endregion

            #region 命令模式
            Receiver r = new Receiver();
            Command.Command command = new Command.ConcreteCommand(r);
            Invoker invoker = new Invoker();
            invoker.SetCommand(command);
            invoker.ExecuteCommand();
            #endregion

            #region 职责链模式
            Handler h1 = new ConcreteHandler1();
            Handler h2 = new ConcreteHandler2();
            h1.SetSuccessor(h2);
            int[] requests = { 2, 3, 4, 5, 6, 12, 34, 11, 15 };
            foreach (int request in requests)
            {
                h1.HandlerRequest(request);
            }
            #endregion

            #region 中介者模式
            ConcreteMediator mediator = new ConcreteMediator();
            ConcreteColleague1 colleague1 = new ConcreteColleague1(mediator);
            ConcreteColleague2 colleague2 = new ConcreteColleague2(mediator);
            mediator.Colleague1 = colleague1;
            mediator.Colleague2 = colleague2;
            colleague1.Send("吃饭了吗?");
            colleague2.Send("还没有呢");
            #endregion

            #region 享元模式
            int extri = 22;
            FlyweightFactory f = new FlyweightFactory();
            Flyweight.Flyweight fx = f.GetFlyweight("X");
            fx.Operation(--extri);

            Flyweight.Flyweight fy = f.GetFlyweight("Y");
            fy.Operation(--extri);

            Flyweight.Flyweight fz = f.GetFlyweight("Z");
            fz.Operation(--extri);

            #endregion

            #region 解释器模式
            <<<<<<< HEAD
            Interpreter.Context context = new Interpreter.Context();
            IList<Interpreter.AbstractExpression> list = new List<Interpreter.AbstractExpression>();
            list.Add(new Interpreter.TerminalExpression());
            list.Add(new Interpreter.NormalExpression());
            foreach (Interpreter.AbstractExpression exp in list)
                exp.Interpret(context);
            =======
            Interpreter.Context context1 = new Interpreter.Context();
            IList<AbstractExpression> list = new List<AbstractExpression>();
            list.Add(new TerminalExpression());
            list.Add(new NonTerminalExpression());
            foreach (AbstractExpression exp in list)
            {
                exp.Interpreter(context1);
            }
            #endregion

            #region 访问者模式
            ObjectStructure os = new ObjectStructure();
            os.Add(new Man());
            os.Add(new Woman());
            Success v1 = new Success();
            os.Display(v1);
            Failing f1 = new Failing();
            os.Display(f1);

            Amativeness a1 = new Amativeness();
            os.Display(a1);
            >>>>>>> 77e342ef6e96917a8dc01e72e41626dcffd4ba13
            #endregion
            Console.Read();
        }