包小盒设计网站wordpress手机版主题无效
news/
2025/9/24 7:33:35/
文章来源:
包小盒设计网站,wordpress手机版主题无效,个人免费注册公司网站,网站建设新手教程简单工厂模式描述的是#xff0c;通过类的继承关系#xff0c;父类#xff08;工厂类#xff09;与子类#xff08;产品类#xff09;#xff0c;调用父类中的方法#xff0c;实际干活儿的是子类中的方法#xff1b;封装需求的不确定性#xff0c;做出通用的编程通过类的继承关系父类工厂类与子类产品类调用父类中的方法实际干活儿的是子类中的方法封装需求的不确定性做出通用的编程下面以常用的计算器为例 最容易想到的写法是 1 Console.WriteLine(请输入操作数1);2 double a double.Parse(Console.ReadLine());3 Console.WriteLine(请输入操作符);4 string opt Console.ReadLine();5 Console.WriteLine(请输入操作数2);6 double b double.Parse(Console.ReadLine());7 8 double result 0;9
10 switch (opt)
11 {
12 case :
13 result a b;
14 break;
15 case -:
16 result a - b;
17 break;
18 case *:
19 result a * b;
20 break;
21 case /:
22 if (b 0)
23 {
24 throw new Exception(被除数不能为0);
25 }
26 result a / b;
27 break;
28 }
29 Console.WriteLine(计算结果是result); 这么写对于控制台来说基本够用了但是它有很多的弊病 1.计算结果是直接输出到控制台如果要做一个WinForm版呢目前只有重新写一遍不能够重用 2.这里的case只考虑了基本的四则运算业务变更后如果有求平方、求立方、开方等运算呢那么只能去改写好的方法一个项目中只有一处还好说如果有多处要修改那就麻烦了可扩展性太差3.这段代码也没有体现面向对象的3大特性封装、继承、多态。 基于以上的种种弊端需要修改代码 首先定义一个父类Operat在类中不考虑未来是否有四则运算及怎样运算 Operat类 1 /// summary2 /// 父类计算方法3 /// /summary4 public class Operat5 {6 public double NumberA { get; set; }7 public double NumberB { get; set; }8 /// summary9 /// 构造函数
10 /// /summary
11 /// param namea/param
12 /// param nameb/param
13 public Operat(double a,double b)
14 {
15 this.NumberA a;
16 this.NumberB b;
17 }
18
19 public virtual double Oper()
20 {
21 double result 0;
22 return result;
23 }
24 } 只定义了2个操作数和一个计算方法虚方法因为这里不知道未来有几个运算 再定义一个加法类OperatAdd来继承它并实现父类中的计算方法 OperatAdd类加法 1 class OperatAdd : Operat2 {3 //构造函数4 public OperatAdd(double a,double b):base(a,b)5 {6 7 }8 /// summary9 /// 子类重写父类的Oper方法实现
10 /// /summary
11 /// returns/returns
12 public override double Oper()
13 {
14 double result 0;
15 result NumberA NumberB;
16 return result;
17 }
18 } 依次定义后面的3个类减、乘、除 OperatSub类减法 1 class OperatSub : Operat2 {3 public OperatSub(double a,double b):base(a,b)4 {5 6 }7 public override double Oper()8 {9 double result 0;
10 result NumberA - NumberB;
11 return result;
12 }
13 } OperatMult类乘法 1 class OperatMult:Operat2 {3 public OperatMult(double a,double b):base(a,b)4 {5 6 }7 public override double Oper()8 {9 double result 0;
10 result NumberA * NumberB;
11 return result;
12 }
13 } OperatVision类除法 1 class OperatVision:Operat2 {3 public OperatVision(double a,double b):base(a,b)4 {5 6 }7 public override double Oper()8 {9 double result 0;
10 if (NumberB0)
11 {
12 throw new Exception(被除数不能为0);
13 }
14 result NumberA / NumberB;
15 return result;
16 }
17 } 这时候应该考虑的问题是在业务中怎样调用这4个子类中的运算方法简单工厂 定义一个工厂类由工厂类根据具体业务去调用具体的子类产品类 1 /// summary2 /// 工厂类3 /// /summary4 public class OperatFactory5 {6 public Operat JiSuan(double a, string opt, double b)7 {8 Operat opt1 null;9 //封装了异同业务需求的差异
10 switch (opt)
11 {
12 case :
13 opt1 new OperatAdd(a, b); //产品1加法
14 break;
15 case -:
16 opt1 new OperatSub(a, b); //产品2减法
17 break;
18 case *:
19 opt1 new OperatMult(a, b); //产品3乘法
20 break;
21 case /:
22 opt1 new OperatVision(a, b); //产品4除法
23 break;
24 }
25 return opt1; //返回父类对象
26 }
27 } 给opt赋不同的运算工厂类就会去调用相应的子类执行计算方法new出相应的产品类因为子类中都只是 return result;没有考虑这个结果具体显示在那个地方控制台还是winform中的label就变得相当灵活了并返回父类对象。 控制台去使用时调用工厂类中JiSuan方法返回父类对象即可 1 Console.WriteLine(请输入操作数1);2 double a double.Parse(Console.ReadLine());3 Console.WriteLine(请输入操作符);4 string opt Console.ReadLine();5 Console.WriteLine(请输入操作数2);6 double b double.Parse(Console.ReadLine());7 8 OperatFactory factory new OperatFactory();9 Operat opt1 factory.JiSuan(a, opt, b);
10 Console.WriteLine(计算结果是{0}, opt1.Oper());
11 Console.ReadKey(); 而winform的代码也很类似 1 lbResult.Text ;2 3 lbResult.ForeColor Color.Red;4 lbResult.Font new Font(宋体, 12);5 double a double.Parse(txtNumber1.Text.Trim());6 string opt cmbOperat.SelectedItem.ToString();7 double b double.Parse(txtNumber2.Text.Trim());8 9 OperatFactory factory new OperatFactory();
10 Operat oper factory.JiSuan(a, opt, b);
11 lbResult.Text oper.Oper().ToString(); 可以看出上面2段代码的第二段几乎是一样的代码就足够通用了。 转载于:https://www.cnblogs.com/chens2865/p/3732071.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/915213.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!