一个面像对像的计算器
来源:互联网 发布:怎么买到淘宝客户信息 编辑:程序博客网 时间:2024/04/28 15:02
今天看了程杰老师的《大话模式设计》的第一章,对面像对像的认识又上了一个台阶,特别是那个控制台的计
算器让我感受很深,所以想贴出来让家末共同学习:
在这里即使是一个小小的计算器也使用了面像对像的三大特性:封装,继承,多态.。。呵呵,这是我以前一直
都想不通的问题,因为以前也有人叫我用面像对像的方式去写一个控制台,但就是写来写去也用不到面像对像,用
他们的话说就是:喊着面像对像的口号,却用着面像过程的思维。我认为这句话真的很值得我们这些“面像对像的
程序员“去思考。好了。。先看作者建的一个 OperateBase.cs 文件中写了哪些类:
using System;using System.Collections.Generic;using System.Text;//业务逻辑代码namespace Console1{ public class OperateBase//写一个基类,用于被继承,记住:如果是基类,则前面的Public一定不能少 { private double _numberA; private double _numberB;//声明为私有变量,即使是派生类也不能直接使用它 public double NumberA { get { return _numberA; } set { _numberA = value; } } public double NumberB { get { return _numberB; } set { _numberB = value; } } //再写一个虚方法,以便继承类可以重写 public virtual double GetRuslut() { double result = 0; return result; } } class OperateAdd : OperateBase//写一个加法类,继承基类,并重写GetRuslut()方法 { public override double GetRuslut() { return NumberA + NumberB; } } class OperteSub : OperateBase//写一个减法类,继承基类,并重写GetRuslut()方法 { public override double GetRuslut() { return NumberA - NumberB; } } class OperateMul : OperateBase//写一个乘法类,继承基类,并重写GetRuslut()方法 { public override double GetRuslut() { return NumberA * NumberB; } } class OperateDiv : OperateBase//写一个除法类,继承基类,并重写GetRuslut()方法 { public override double GetRuslut() { if (NumberB == 0) { throw new Exception("除数不能为0"); } return NumberA / NumberB; } } public class GetOperateMethod //用作者的话说,这是一个简单工厂模式 { public static OperateBase GetMethod(string operateMethod) { OperateBase Oper = null; switch (operateMethod) { case "+": { Oper = new OperateAdd(); } break; case "-": { Oper = new OperteSub(); } break; case "*": { Oper = new OperateMul(); } break; case "/": { Oper = new OperateDiv(); }break ; default: { throw new Exception("输入操作符号错误 "); } } return Oper; } }}
再来看看客户端代码:
using System;using System.Collections.Generic;using System.Text;namespace Console1{ class Program { static void Main(string[] args) { Console.WriteLine("请输入数A:"); string numberA = Console.ReadLine(); Console.WriteLine("请输入数B:"); string numberB = Console.ReadLine(); Console.WriteLine("请输入操作符:"); string opereate = Console.ReadLine(); string result = ""; OperateBase Oper = GetOperateMethod.GetMethod(opereate); try { Oper.NumberA = Convert.ToDouble(numberA); Oper.NumberB = Convert.ToDouble(numberB); } catch { Console.WriteLine("输入字符类型错误 "); } result = Oper.GetRuslut().ToString(); Console.WriteLine(result); Console.ReadLine(); } }}
- 一个面像对像的计算器
- php的oop(面像对像)
- 面像对像的Java实现——封装
- 一个用FSO操作的对像
- 多对像合并成一个对像
- 面试题 19: 数的镜像
- 对像序列化为 json 对像
- ABAP 模拟做成像windows一样的计算器
- 网页中对像的拖动代码
- 更改数据库对像的所有者
- 对镜像站点的理解
- 网页中对像的拖动代码
- iPhotoMEASURE:立体像对的终结者?
- 找对像的几种方法
- isolib对像结合TweenLite的运动
- String对像的方法属性
- hibernate4以后SessionFactory对像的生成
- 取spring.net 注入的对像
- C8050F02x单片机FLASH读写(Keil C编程心得)
- BI--SAP BI的权限管理
- 打开文件的方法&SHELLEXECUTEINFO 结构
- Bug的质量衡量
- excel 连接字符串的含义。
- 一个面像对像的计算器
- 《全方位体验Workshop10.1》第一部份
- asp.net2 统一搜索引擎关键字编码
- 《全方位体验Workshop10.1》的第二部分
- Microsoft Silverlight Tools Beta 2 for Visual Studio 2008 下载地址
- 在Eclipse上使用XFire开发WebService
- 方法签名
- 想作程序员怎么办??
- 想作程序员怎么办??