
设计模式 - 1) 简单工厂
发布日期:2021-05-13 19:47:03
浏览次数:13
分类:博客文章
本文共 2655 字,大约阅读时间需要 8 分钟。
// 工厂生成对象类public class OperationFactory{ public static OperationClass GetOperation(string operationType) { OperationClass opera = null; switch (operationType) { case "+": opera = new AddOperation(); break; case "-": opera = new SubOperation(); break; case "*": opera = new MulOperation(); break; case "/": opera = new DivOperation(); break; case "sqrt": opera = new SqrtOperation(); break; case "squa": opera = new SquareOperation(); break; default: break; } return opera; }}// 运算符基类public abstract class OperationClass{ public double NumA { get; set; } public double NumB { get; set; } public abstract double GetResult(); }// 加号类public class AddOperation : OperationClass{ public override double GetResult() { return NumA + NumB; }}// 减号类public class SubOperation : OperationClass{ public override double GetResult() { return NumA - NumB; }}// 除号类public class DivOperation : OperationClass{ public override double GetResult() { try { if (NumB.Equals(0)) { throw new DivideByZeroException("分母为零"); } return NumA / NumB; } catch (DivideByZeroException ex) { Console.WriteLine(ex); } return 0; }}// 乘号类public class MulOperation : OperationClass{ public override double GetResult() { return NumA * NumB; }}// 开根号类public class SqrtOperation : OperationClass{ public override double GetResult() { return Math.Sqrt(NumA); }}// 业务运用类public class OperationOutput{ public void Show() { OperationClass ope; do { Console.WriteLine("请输入正确的运算符: * / + - sqrt squa"); ope = OperationFactory.GetOperation(Console.ReadLine()); } while (ope == null); Console.WriteLine("请输入第一个数字"); ope.NumA = double.Parse(Console.ReadLine()); if (!(ope is SqrtOperation)) { Console.WriteLine("请输入第二个数字"); ope.NumB = double.Parse(Console.ReadLine()); } Console.WriteLine("结果是:" + ope.GetResult()); Console.WriteLine(); }}
1)缺点:每新增一种操作,就需要修改 OperationFactory 类的 GetOperation(string operationType) 方法,这违法了对扩展开放,对修改封闭的原则。
2)可通过工厂模式、抽象工厂的方式得到适当改善,可通过反射彻底改善。
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年05月03日 08时09分01秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
C#中创建Android项目
2019-03-10
C#使用OpenCV(OpenCVSharp)
2019-03-10
统计学之变异系数与是非标志
2019-03-10
统计学之偏度系数和峰度系数
2019-03-10
力扣数据库:删除重复的电子邮箱
2019-03-10
leetcode 102 剑指Offer 32 二叉树的层次遍历
2019-03-10
关于继承的一些基本知识
2019-03-10
如何批量下载新浪微博相册,一键下载微博相册原图
2019-03-10
抖音发布黄金时间段,抖音上热门最佳时间
2019-03-10
小米有品的手机详情图怎么保存,如何把小米有品商品详情图保存
2019-03-10
我的图床~
2019-03-10
MySQL 实战 45 讲笔记 | 事务隔离和 MVCC
2019-03-10
自学C++编程,掌握这三项技能就可以工作了
2019-03-10
HTTP 常见状态码
2019-03-11
Thymeleaf sec:authorize 标签不生效
2019-03-11
js回车键登录
2019-03-11
Iterable与Iterator
2019-03-11
API_Net官方代码之训练网络
2019-03-11
Python机器学习(五十二)SciPy 基础功能
2019-03-11
Python机器学习(六十五)Matplotlib 入门
2019-03-11