简单工厂模式
来源:互联网 发布:家世比 java 编辑:程序博客网 时间:2024/06/10 06:45
- 对于刚学习编程的童鞋来说,能熟练的敲敲代码就已经非常棒了。举个例子,比如用C#敲一个计算器的代码:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 计算器{ class Program { static void Main(string[] args) { Console.Write("请输入数字A:"); string A = Console.ReadLine(); Console.Write("请选择运算符号(+、-、*、/):"); string B = Console.ReadLine(); Console.Write("请输入数字B:"); string C = Console.ReadLine(); string D = ""; if (B == "+") { D = Convert.ToString(Convert.ToDouble(A) + Convert.ToDouble(C)); } if (B == "-") { D = Convert.ToString(Convert.ToDouble(A) - Convert.ToDouble(C)); } if (B == "*") { D = Convert.ToString(Convert.ToDouble(A) * Convert.ToDouble(C)); } if (B == "/") { D = Convert.ToString(Convert.ToDouble(A) / Convert.ToDouble(C)); } Console.WriteLine("结果是:" + D); Console.ReadKey(); } }}
- 但是对于上面的这段代码一点都不规范,比如说算除法的时候,分母是“0”怎么办?计算出来不会报错,但是会显示出结果为“⚮”,所以不够严谨,基于严谨的基础上又会从新编出另一个代码来:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 规范之后的代码{ class Program { static void Main(string[] args) { try { Console.Write("请输入数字A:"); string strNumberA = Console.ReadLine(); Console.Write("请选择运算符号(+、-、*、/):"); string strOperate = Console.ReadLine(); Console.Write("请输入数字B:"); string strNumberB = Console.ReadLine(); string strResult = ""; switch (strOperate) { case "+": strResult = Convert.ToString(Convert.ToDouble(strNumberA) + Convert.ToDouble(strNumberB)); break; case "-": strResult = Convert.ToString(Convert.ToDouble(strNumberA) - Convert.ToDouble(strNumberB)); break; case "*": strResult = Convert.ToString(Convert.ToDouble(strNumberA) * Convert.ToDouble(strNumberB)); break; case "/": if (strNumberB != "0") { strResult = Convert.ToString(Convert.ToDouble(strNumberA) / Convert.ToDouble(strNumberB)); } else { strResult = "除数不能为0"; } break; } Console.WriteLine("结果是:" + strResult); Console.ReadLine(); } catch (Exception ex) { Console.WriteLine("您的输入有错误:" + ex.Message); } Console.ReadKey(); } }}
- 一个好的代码,能够随时都可以很好很方便的增删改查,如果用上面的第二套代码的话,是不是看起来就特别的复杂,甚至看都不想去看,这个时候我们就需要从面向对象出发了。
面向对象:
⑴对象。
对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。[2]
⑵对象的状态和行为。 对象具有状态,一个对象用数据值来描述它的状态。 对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。
对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中[2] ⑶类。
具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。
类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。 类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。[2]
⑷类的结构。 在客观世界中有若干类,这些类之间有一定的结构关系。通常有两种主要的结构关系,即一般–具体结构关系,整体–部分结构关系。
①一般–具体结构称为分类结构,也可以说是“或”关系,或者是“is a”关系。
②整体–部分结构称为组装结构,它们之间的关系是一种“与”关系,或者是“has a”关系。 ⑸消息和方法。
对象之间进行通信的结构叫做消息。在对象的操作中,当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的信息。发送一条消息至少要包括说明接受消息的对象名、发送给该对象的消息名(即对象名、方法名)。一般还要对参数加以说明,参数可以是认识该消息的对象所知道的变量名,或者是所有对象都知道的全局变量名。
类中操作的实现过程叫做方法,一个方法有方法名、返回值、参数、方法体。
- 使用面向对象编写程序使得程序更加的灵活,容易修改并且易于复用。所以就有了下面的这段代码:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 封装之后的代码{ class Program { static void Main(string[] args) { try { Console.Write("请输入数字A:"); string strNumberA = Console.ReadLine(); Console.Write("请选择运算符号(+、-、*、/):"); string strOperate = Console.ReadLine(); Console.Write("请输入数字B:"); string strNumberB = Console.ReadLine(); string strResult = ""; strResult = Convert.ToString(Operation.GetResult(Convert.ToDouble(strNumberA), Convert.ToDouble(strNumberB), strOperate)); Console.WriteLine("结果是:" + strResult); Console.ReadLine(); } catch (Exception ex) { Console.WriteLine("您的输入有错误:" + ex.Message); } } } public class Operation //运算类代码 { public static double GetResult(double numberA, double numberB, string operate) { double result = 0d; switch (operate) { case"+": result = numberA + numberB; break; case"-": result = numberA - numberB; break; case"*": result = numberA * numberB; break; case"/": result = numberA / numberB; break; } return result; } } - 这样看起来是不是更加的完美一些,然后再修改修改,改成这样:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 继承与多态{ class 简单工厂 { static void Main(string[] args) { }}public class Operation //Operation运算类{ private double _numberA = 0; private double _numberB = 0; public double NumberA { get { return _numberA; } set { _numberA = value; } } public double NumberB { get { return _numberB; } set { _numberB = value; } } public virtual double GetResult() { double result = 0; return result; }}public class OperationgAdd : Operation //加法类{ public override double GetResult() { double result = 0; result = NumberA + NumberB; return result; }}public class OperationgSub : Operation //减法{ public override double GetResult() { double result = 0; result = NumberA - NumberB; return result; }}public class OperationgMul : Operation //乘法{ public override double GetResult() { double result = 0; result = NumberA * NumberB; return result; }}public class OperationgDiv : Operation //除法类{ public override double GetResult() { double result=0; if (NumberB==0) { throw new Exception("除数不能为0!"); } result = NumberA / NumberB; return result; }}
- 其中要注意这么一个类型模式:
public class OperationFactory { public static OperationCanceledException createOperate(string operate) { OperationCanceledException oper = null; switch (operate) { case"+": oper = new OperationAdd(); break; case "-": oper = new OperationSub(); break; case "+": oper = new OperationMul(); break; case "+": oper = new OperationDiv(); break; } return oper; } }
“`
- 这个类型模式就是简单工厂模式,这是最简单的一种模式,但是用上这个模式之后代码的编程会变得更加的简单和整洁,看起来更加规范,而且使得程序更加的灵活,更容易修改和多次使用。
- 以上只是基于我对简单工厂模式的了解,大神们看到了请多多指正。
- 工厂模式-简单工厂
- 工厂模式-简单工厂
- 工厂模式-简单工厂模式
- 工厂模式-简单工厂模式
- 简单工厂模式,工厂模式
- 工厂模式-简单工厂模式
- 简单工厂模式,工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 简单工厂和工厂模式
- 简单工厂和工厂模式
- 1,工厂模式--简单工厂
- 简单工厂和工厂模式
- 简单工厂,工厂模式,抽象工厂
- 简单工厂,工厂模式,抽象工厂
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂、工厂模式和抽象工厂
- Python中split函数的用法
- 用原生JS读写CSS样式的方法总结
- BOOL 与bool的区别 FALSE 与 false的区别 TURE 与 ture的区别 NULL 与0的区别
- 阿里云ECS使用云市场安装Discuz,验证 Discuz 镜像失败,网站无法访问
- 自定义权限模块3——后端代码实现
- 简单工厂模式
- E1.分段函数求值
- Ext JS4.2学习笔记
- HDUOJ 1856 More is better(并查集)
- codeforces 839 D Winter is here
- 参数传递---形参改变实参指针变量的值
- mysql根据数据库自动生成实体(dto,service,impl,mybatis,xml)
- Zookeeper学习(七):ZooKeeper 实现命名服务(系统唯一ID)
- PubChem分子库