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(); }
public void CashNormalStrategyTestMethod() { double money = 999; CashContext context = new CashContext(new CashNormal()); Assert.AreEqual(money, context.GetResule(money)); }
public void cashRebateTest() { CashContext cc; double totalPrice = 0d; cc = new CashContext("cashRebate"); totalPrice = cc.GetResult(700); Assert.AreEqual(560, totalPrice); }
public void NormalTest() { CashContext cc; double totalPrice = 0d; cc = new CashContext("normal"); totalPrice = cc.GetResult(700); Assert.AreEqual(700, totalPrice); }
public void CashRebateStrategyTestMethod() { double money = 999; double rebate = 0.95d; CashContext context = new CashContext(new CashRebate(rebate)); Assert.AreEqual(money * rebate, context.GetResule(money)); }
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()); }
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)); }
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(); }
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; }
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(); }
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(); }
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(); }
/// <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); }
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); }
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)}"); } }
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); }
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); } }
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(); } }
// 用商場收銀系統 策略與簡單工廠結合 // 1.策略模式是一種定義一系列演算法的方法。從概念上來看,所有這些演算法完成的都是相同的工作,只能實現不同, // 它可以以相同的方法調用所有的演算法,減少了各種演算法類別與使用演算法類別之間的耦合[DPE] // 2.策略模式的優點是簡化了單元測試,因為每個演算法都有自己的類別,可以透過自己的介面單獨測試[DPE] // 3.當不同的行為堆切在一個類別中時,就很難避免使用條件敘述來選擇合適的行為。將這些行為封裝在一個個獨立的Strategy類別中,可以在這些行為的類別中消除條件敘述[DP] // 4.策略模式就是用來封裝演算法的,但在實踐中,我們發現可以用它來封裝幾乎任何類型的規則,只要在分析過程中聽到需要在不同時間應用不同的業務規則 // 就可以考慮使用策略模式處理這種變化的可能性[DPE] // 5.在基本的策略模式中,選擇所用具體實現的職責由用戶端物件承擔,並轉給策略模式的Context物件[DPE] public void StrategyPatternV2(string type) { CashContext context = new CashContext(type); }
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(); }