计算练习—策略模式

Calculate计算类;

public abstract class Calculate    //抽象类 Calculate
    {
        private double a;//第一个数

        public double A//封装字段
        {
            get { return a; }
            set { a = value; }
        }
        private double b;//第二个数字段封装

        public double B
        {
            get { return b; }
            set { b = value; }
        }
        public double result;
        public virtual double Result()
        {
            return result;
        }

    }
    public class Add : Calculate
    {
        public override double Result()
        {
            result = A + B;
            return result;
        }
    }
    public class Sub : Calculate
    {
        public override double Result()
        {
            result = A - B;
            return result;
        }
    }
    public class Mul : Calculate
    {
        public override double Result()
        {
            result = A * B;
            return result;
        }

    }
    public class Div : Calculate
    {
        public override double Result()
        {
            if (A == 0)
            {
                MessageBox.Show("分母不能为零");
            }
            result = A / B;
            return result;

        }
    }
    public class Mod : Calculate
    {
        public override double Result()
        {
            if (A == 0)
            {
                MessageBox.Show("分母不能为零");
            }
            result = A % B;
            return result;

        }

    }
    public class calculate
    {
        public static Calculate Cal(string type)
        {
            Calculate cal = null;
            switch (type)
            {
                case "+":
                    cal = new Add();    //加法策略模式
                    break;
                case "-":
                    cal = new Sub();
                    break;
                case "*":
                    cal = new Mul();
                    break;
                case "/":
                    cal = new Div();
                    break;
                case "%":
                    cal = new Mod();
                    break;
                default:
                    break;
            }
            return cal;

        }
    }
}Form1代码
 private void txtresult_KeyDown(object sender, KeyEventArgs e)
        {
            Calculate cal=null;
            string typ = typ1.Text.ToString();//调用类成员
            cal = calculate.Cal(typ);
            cal.A = Convert.ToDouble(txtone.Text);
            cal.B= Convert.ToDouble(txttwo.Text);
            string result = Convert.ToString(cal.Result());
            //判断计算情况
            if (e.KeyCode==Keys.Enter)
            {

                if (txtresult.Text ==result.ToString())
                {
                    right++;
                    MessageBox.Show("回答正确");
                    txtone.Text = "";
                    txttwo.Text = "";
                    //txtthree.Text = "";
                    txtresult.Text = "";
                    typ1.Text = "";
                    //typ2.Text = "";
                }
                else {
                      MessageBox.Show("回答错误");
                      txtone.Text = "";
                      txttwo.Text = "";
                      //txtthree.Text = "";
                      txtresult.Text = "";
                      typ1.Text = "";
                      //typ2.Text = "";
                }
                question++;
            }

        }截图

ASP.net

Calculate计算类;



public abstract class Calculate    //抽象类 Calculate
    {
        private double a;//第一个数

        public double A//封装字段
        {
            get { return a; }
            set { a = value; }
        }
        private double b;//第二个数字段封装

        public double B
        {
            get { return b; }
            set { b = value; }
        }
        public double result;
        public virtual double Result()
        {
            return result;
        }

    }
    public class Add : Calculate
    {
        public override double Result()
        {
            result = A + B;
            return result;
        }
    }
    public class Sub : Calculate
    {
        public override double Result()
        {
            result = A - B;
            return result;
        }
    }
    public class Mul : Calculate
    {
        public override double Result()
        {
            result = A * B;
            return result;
        }

    }
    public class Div : Calculate
    {
        public override double Result()
        {
            if (A == 0)
            {
                MessageBox.Show("分母不能为零");
            }
            result = A / B;
            return result;

        }
    }
    public class Mod : Calculate
    {
        public override double Result()
        {
            if (A == 0)
            {
                MessageBox.Show("分母不能为零");
            }
            result = A % B;
            return result;

        }

    }
    public class calculate
    {
        public static Calculate Cal(string type)
        {
            Calculate cal = null;
            switch (type)
            {
                case "+":
                    cal = new Add();    //加法策略模式
                    break;
                case "-":
                    cal = new Sub();
                    break;
                case "*":
                    cal = new Mul();
                    break;
                case "/":
                    cal = new Div();
                    break;
                case "%":
                    cal = new Mod();
                    break;
                default:
                    break;
            }
            return cal;

        }
    }
}

后台代码
 protected void calcilate_Click(object sender, EventArgs e)
    {
        Calculate cal = null;
        string typ = DDLtype.SelectedValue.ToString();//调用类成员
        cal = calculate.Cal(typ);//运算类型
        cal.A = Convert.ToDouble(one.Text);//第一个数
        cal.B = Convert.ToDouble(two.Text);//第二个数
        string answer = Convert.ToString(cal.Result());//答案
        if (result.Text == answer.ToString())//判断计算结果
        {
            Response.Write("<script>alert(‘回答正确‘)</script>");
            Panel1.GroupingText = one.Text + DDLtype.SelectedValue + two.Text + Label1.Text + result.Text;//将题放入panel中
            one.Text = "";
            two.Text = "";
            result.Text = "";
            DDLtype.SelectedValue = "请选择计算类型";

        }
        else
        {
            Response.Write("<script>alert(‘回答错误‘)</script>");
            one.Text = " ";
            two.Text = " ";
            result.Text = " ";
            DDLtype.SelectedValue = "请选择计算类型";

        }

        Panel1.Visible = true;

    }

截图






时间: 2024-10-24 03:37:27

计算练习—策略模式的相关文章

计算器之策略模式

一.代码实现 Form1代码 namespace szys { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public static int right = 0; public static int Count = 0; private int t; string path = ".\text1.txt"; int a = 0; private void button5_C

Strategy Design Pattern(策略模式)

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

及房重构利用策略模式+简单工厂实现消费金额的计算

在做第一次机房收费系统中,有一项很令人头疼的事情,那就是临时用户的问题,在结账的时候,我们需要考虑该用户是固定用户还是临时用户,原来在用VB6.0做的时候,如果我们实现了这个功能,那么在代码中会出现很多的IF....else 语句,同时,我们必须要调用数据设定窗体中的数据,这样的话,会很麻烦,写出来的代码也会很乱,如今学习了设计模式,我们可以利用策略模式来实现对不同用户的消费金额进行计算.将不同的类型用户所用到的不同算法封装到子类中去,同时与简单工厂结合起来,来实现对不同子类的实例化.这样在很大

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

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

设计模式学习总结(八)策略模式(Strategy)

策略模式,主要是针对不同的情况采用不同的处理方式.如商场的打折季,不同种类的商品的打折幅度不一,所以针对不同的商品我们就要采用不同的计算方式即策略来进行处理. 一.示例展示: 以下例子主要通过对手机和笔记本添加不同的策略来实现策略模式的应用! 1. 创建抽象策略角色:DailyProductStrategy abstract class DailyProductStrategy { public abstract void AlgorithmInterface(); } 2. 创建具体策略角色:

【LabVIEW技巧】策略模式

前言 在之前的文章中,我们提到了如何学习OOP以及对应的简单工厂模式,由于时间比较长,我们先回顾一下之前讲到的一些内容,然后继续了解策略模式. 为什么学习OOP 在测控系统的软件开发过程中,我们LabVIEW工程师一直认为程序完成功能就可以了,但是随着程序的越来越复杂,我们发现很多情况下成型系统到后期无法添加功能或很难添加功能. 是什么阻碍了我们软件系统的开发?为什么在需求沟通不明确的前期,我们无法开发软件:在需求明确的后期,又无法对软件进行灵活修改. 如果大家仔细分析中国的四大发明,就会发现活

策略模式(行为型)

思考问题: 一个书店的某类书是免费的,某类书是固定1元的,某类书是按折扣算的(比如88%)(同一类别的书本价格一样).假定顾客只买一类书,在设计书店BookStore类时应该如何计算顾客买书的费用? 解答: 1. 你有可能不知道如何设计,毕竟上面的计算规则不一样(并不是一类书8折另一类书9折那样好计算): 2. 既然这样,我们就定义一个接口(策略接口),规定一个方法(strategyInterface())为计算金额的方法,BookStore类构造对象时传入该策略接口的实现类对象(在构造该对象时

设计模式--策略模式

策略模式的用例图 定义一个算法抽象策略类 //抽象算法类 abstract class Strategy { //算法方法 public abstract void AlgorithmInterface(); } 通过继承实现具体的算法 //具体算法A class ConcreteStrategyA : Strategy { //算法A实现方法 public override void AlgorithmInterface() { Console.WriteLine("算法A实现");

[工作中的设计模式]策略模式stategy

一.模式解析 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化. 策略模式的关键点为: 1.多种算法存在 2.算法继承同样的接口,执行同样的行为,为可以替代的 3.算法调用者唯一,算法调用者可以灵活改变自己需要调用的算法,从而实现计算. 二.模式代码 算法接口: /** * 算法统一接口,所有算法继承此接口 * @author zjl * @time 2016-1-24 * */ public interface IStra