WPF 策略模式

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;
namespace 老陈Wpf
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        public static int Count = 0;
        public static int right = 0;
        int m = 0;
        private void luti_Click_1(object sender, RoutedEventArgs e)
        {
            StreamWriter n1 = File.AppendText("C:\\n1.txt");
            n1.WriteLine(textBox1.Text);
            n1.Close();
            StreamWriter n2 = File.AppendText("C:\\n2.txt");
            n2.WriteLine(textBox2.Text);
            n2.Close();
            StreamWriter n3 = File.AppendText("C:\\n3.txt");
            n3.WriteLine(textBox3.Text);
            n3.Close();
            MessageBox.Show("录题成功");
            textBox1.Text = "";
            textBox2.Text = "";
            textBox3.Text = "";
        }
        //开始按钮
        private void start_Click(object sender, RoutedEventArgs e)
        {
            //出题
            string[] n1 = new string[100];
            n1 = File.ReadAllLines("C:\\n1.txt");
            textBox1.Text = n1[m];
            string[] n2 = new string[100];
            n2 = File.ReadAllLines("C:\\n2.txt");
            textBox2.Text = n2[m];
            string[] n3 = new string[100];
            n3 = File.ReadAllLines("C:\\n3.txt");
            textBox3.Text = n3[m];
            m++;
        }
        //结束
        private void end_Click(object sender, RoutedEventArgs e)
        {
            textBox5.Text = MainWindow.Count.ToString();//题目总数
            textBox6.Text = MainWindow.right.ToString();
            textBox7.Text = ((MainWindow.right / (double)(MainWindow.Count)) * 100).ToString() + "%";//正确率
        }
        //运算结果的触发事件
        private void textBox4_KeyDown(object sender, KeyEventArgs e)
        {
            wpf.Class1.yunsuanfu yunsuanfu = null;
            double a = Convert.ToDouble(textBox1.Text);//第一个数赋值
            double b = Convert.ToDouble(textBox3.Text);//第二个数赋值
            string c= textBox2.Text;//运算符号
            switch (c)
            { case"+":
                   yunsuanfu = new wpf.Class1.yunsuanfu(new wpf.Class1.Add());//调用策略模式
                    break;
              case "-":
                    yunsuanfu = new wpf.Class1.yunsuanfu(new wpf.Class1.Sub());
                    break;
              case "*":
                    yunsuanfu = new wpf.Class1.yunsuanfu(new wpf.Class1.Mul());
                    break;
              default:
                    break;
            }
            if(e.Key == Key.Enter)
            {
                string result = yunsuanfu.Cal(a, b,c).ToString();
                if(textBox4.Text==result.ToString())
                {
                    MessageBox.Show("回答正确!下一题请按开始按钮!");
                    right++;
                    Count++;
                }
         else
                {
                    MessageBox.Show("回答错误!下一题请按开始按钮!");
                    Count++;
                }
                textBox4.Clear();
            }
        }
    }
}

策略模式的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace wpf
{
    class Class1
    {//定义一个接口
        public interface Calculator
        {
            double Cal(double a, double b);//定义一个方法用于计算
        }

        public class Add : Calculator
        {
            public double Cal(double a, double b)
            {
                double result;
                result = a + b;
                return result;
            }
        }
        public class Sub : Calculator
        {
            public double Cal(double a, double b)
            {
                double result;
                result = a - b;
                return result;
            }
        }
        public class Mul : Calculator
        {
            public double Cal(double a, double b)
            {
                double result;
                result = a * b;
                return result;
            }
        }
        public class yunsuanfu
        {
            private Calculator calculate;

            public yunsuanfu(Calculator calculate)
            {
                this.calculate = calculate;
            }
            public double Cal(double a, double b, string m)//返回运算结果
            {
                return this.calculate.Cal(a, b);
            }
        }
    }
}

 运行后的界面 

PSP消耗

总结:对于这次的策略模式的实现,我觉得在实现的过程中很难,由于我基础比较差,以前根本对策略模式没什么了解,所以对于策略模式的实现,我请教了我们班学霸级的同学把我教会,我才开始做这次的作业,在测试代码的过程中遇到了很多困难,不过在我的小伙伴的帮助下解决了。对于上次博客老师评论的“控件命名要表意”,我觉得很对,控件表意后再看很快找到了,这次代码关于命名控件上我做了一些修改。PSP耗时分析我第一次写,可能会不太好,我是在老师建议后去看了闫同学的博客后写的,觉得很佩服别的同学能学以致用,以后应该向她学习。

时间: 2024-10-27 10:51:52

WPF 策略模式的相关文章

计算器软件的代码实现 (windowform窗体+SQL+策略模式)

一 整体概述 这个计算器软件的功能和以前的功能基本上一样,只不过是数据的保存形式发生了变化,,以前用的是txt文件保存,现在更正用SQL数据库,现在更改了以前的文件保存形式,是三层架构中数据层的更换,但是仍然采用了设计模式中的策略模式,对于在wpf中实现的要求,会在今后中进一步实现的! 二 数据库代码的封装  using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sy

【设计模式】策略模式 (Strategy Pattern)

策略模式是一种很简单的基础模式,用于封装一系列算法,使客户端的访问独立于算法的实现.我们可以"井中取水"来形象的描述策略模式."取水"是一个动作,完成这个动作的方式有很多中,可以直接用手提.可以用水车汲水.也可以用电泵抽水.在不同的环境和条件下,我们选择不同的取水方式,这就是策略模式. 策略模式的应用场景 1,有大量动作相同实现不同的行为模式需要配置,以使在适当的环境下选择恰当的行为. 2,算法或实现需要一系列不同的变量.同样的行为在不同的前提下产生不同的结果. 3

PHP设计模式-策略模式

<?php//策略模式//将一组特定的算法或行为 封装成一个类,以适应上下文环境 //策略的接口文件 约定策略的行为 针对一种情况 产生具体的策略interface Policy{ function showAd();} class Female implements Policy{ public function showAd() { echo __CLASS__.' policy'; }} class Male implements Policy{ public function showA

对设计模式的总结之简单工厂与策略模式

前言 面向对象编程追求的本质-提高扩展性.可维护性.灵活性和复用性.合理利用面向对象6个原则,能够很好的达到要求.如何利用好就是至关重要的了,前人总结了23+个设计模式能够让初学者更容易学到其中的精髓,本文就说说我对本人对简单工厂模式.策略模式的见解. 简单工厂模式与策略模式 简单工厂模式 工作中,常常遇到需要做一个功能(鸭子),这个功能中含有可控个数的子操作功能(鸭子叫,鸭子跑,鸭子飞),而且子功能在不同的情况下处理方式又不相同(成年鸭子/小鸭子叫,成年鸭子/小鸭子跑,成年鸭子/小鸭子飞).我

Java 策略模式

Java 策略模式 @author ixenos 定义 1.封装算法:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换 2.分割行为和环境:对用户屏蔽内部实现,使客户端在调用算法的时候能够互不影响地互换 策略模式的实现(面向接口编程) 方法: 1.接口多态:策略模式的用意是针对一组算法,将每个算法封装到具有共同接口的独立的类中,从而使他们之间可以相互替换 2.具体策略提供不同算法,环境负责维持和查询策略,把具体策略和环境分割开来,使得算法可以在不影响客户端和环境的情况下修改 角色分工:

设计模式之策略模式

一.概述我们来实现一个企业的工资系统,该企业中不同级别的员工工资算法都不相同,针对该问题,最容易想到的莫过于在代码中堆积一大堆if…else…语句或者是switch…case…语句.如果该企业中不同级别的员工过多,或是对级别的调整比较频繁,那该系统就会显得复杂而脆弱.如何能将对象和算法解耦,从而使得在系统运行时能透明的改变对象的算法呢?这就到了策略模式大显身手的时候了.二.策略模式策略模式定义了一系列算法,把它们一个个封装起来,并且使它们可相互替换.该模式可使得算法能独立于使用它的客户而变化.策

设计模式之桥梁模式和策略模式的区别

桥接(Bridge)模式是结构型模式的一种,而策略(strategy)模式则属于行为模式.以下是它们的UML结构图. 桥梁模式: 策略模式: 在桥接模式中,Abstraction通过聚合的方式引用Implementor. 举一个例子: 策略模式:我要画圆,要实心圆,我可以用solidPen来配置,画虚线圆可以用dashedPen来配置.这是strategy模式. 桥接模式:同样是画圆,我是在windows下来画实心圆,就用windowPen+solidPen来配置,在unix下画实心圆就用uni

Strategy Design Pattern(策略模式)

策略模式意义在于,当我们有多种不同的算法时,程序能够动态的选择算法进行计算. 策略模式的另外一个英文名字是Policy Strategy. 策略模式最典型的里一个例子就是JAVA中复杂对象的排序(java.util.Arrays.sort,java.util.Collections.sort),用户可以自己定义各种排序算法(规则),然后在需要排序时将算法传给排序函数.从而实现排序方式的变化,获得不同的排序结果.参见:http://my.oschina.net/nox/blog/487478 下面

设计模式之-策略模式

问题描述 实现游戏的不同角色 解决方案 存在问题 策略模式 总结 问题描述 实现游戏的不同角色 某游戏中Queen,King,Knight这3种角色,每种角色都有使用武器行为,设计这三个类,提高代码的重用性和可维护性. 解决方案 Queen,King,Knight这三个角色都是角色,都可以move,可以stop,因此可以设计一个Character抽象类,抽取三个角色的共同行为,减少代码的重复性,Character定义如下: public abstract class Character { pu