c#设计模式之简单工厂
1.面向对象的3大属性,封装、继承、多态,以一个加单的计算机为例:
创建一个父类Operation 有两个属性 和一个计算方法(虚方法),便于子类重写:
1 public class Operation 2 { 3 private double _numberA = 0; 4 private double _numberB = 0; 5 6 public double NumberA 7 { 8 get { return _numberA; } 9 set { _numberA = value; } 10 } 11 12 public double NumberB 13 { 14 get { return _numberB; } 15 set { _numberB = value; } 16 } 17 18 /// <summary>虚方法 19 /// 20 /// </summary> 21 /// <returns></returns> 22 public virtual double GetResult() 23 { 24 double result = 0; 25 return result; 26 } 27 }
View Code
接下来创建计算类,加减乘除类来集成操作类
加类
1 public class OperationAdd:Operation 2 { 3 public override double GetResult() 4 { 5 double result = 0; 6 result = NumberA + NumberB; 7 return result; 8 } 9 }
View Code
减类
1 public class OperationSub:Operation 2 { 3 public override double GetResult() 4 { 5 double result = 0; 6 result = NumberA - NumberB; 7 return result; 8 } 9 }
View Code
乘类
1 public class OperationMul:Operation 2 { 3 public override double GetResult() 4 { 5 double result = 0; 6 result = NumberA * NumberB; 7 return result; 8 } 9 }
View Code
除类
1 public class OperationDiv:Operation 2 { 3 public override double GetResult() 4 { 5 double result = 0; 6 if (NumberB == 0) 7 throw new Exception("除数不能为0"); 8 result = NumberA / NumberB; 9 return result; 10 } 11 }
View Code
然后通过简单工厂类来创建计算的实例
1 public class OperationFactory 2 { 3 public static Operation createOperate(string operate) 4 { 5 Operation oper = null; 6 switch (operate) 7 { 8 case "+": 9 oper = new OperationAdd(); 10 break; 11 case "-": 12 oper = new OperationSub(); 13 break; 14 case "*": 15 oper = new OperationMul(); 16 break; 17 case "/": 18 oper = new OperationDiv(); 19 break; 20 } 21 return oper; 22 } 23 }
View Code
最后通过界面去调用:
1 static void Main(string[] args) 2 { 3 Operation oper; 4 oper = OperationFactory.createOperate("+"); 5 oper.NumberA = 1; 6 oper.NumberB = 2; 7 double result = oper.GetResult(); 8 Console.WriteLine(result); 9 Console.ReadKey(); 10 }
View Code
这里把计算过程都封装成一个方法,每个计算类又集成了操作类,这样由于每个方法都重写了计算方法,这里表现出一个方法的不同表现形态,如果以后要增加其他的方法,只需要继承操作类 重写计算方法即可,这样也不会对原有的程序进行修改,实现了解耦,面向对象语言的优点在于可维护性,可复用,可扩展、灵活性。
以上为自学的一点总结,希望有不对的地方,请大家指点,谢谢
转载于:https://www.cnblogs.com/M-LittleBird/p/5755607.html
c#设计模式之简单工厂相关推荐
- php的类图怎么生成_PHP设计模式之简单工厂模式
PHP设计模式之简单工厂模式 先从简单工厂入门,不管是面试还是被他人面试,在问到设计模式的时候,大多数人都会提到工厂模式.毫无疑问,工厂相关的几种模式在设计模式中是最出名的也是应用比较广泛的一种模式. ...
- C#设计模式(2)——简单工厂模式
一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式--简单工厂模式. 二.简单工厂 ...
- 工厂模式 java场景_研磨设计模式之简单工厂模式(场景问题)
简单工厂不是一个标准的设计模式,但是它实在是太常用了,简单而又神奇,所以还是需要好好掌握的,就当是对学习设计模式的热身运动吧.为了保持一致性,我们尽量按照学习其它模式的步骤来进行学习. 1 场景问题 ...
- .NET设计模式(1): 简单工厂模式
.NET设计模式(1): 简单工厂模式 最近一直在看设计模式,想把自己的学习笔记与大家分享一下,如果能帮助大家的话,我会非常高兴,同时也欢迎大家指出里面的不足.园子里其实关于此类文章已经很多了,如果d ...
- JS常用的设计模式(2)——简单工厂模式
JS常用的设计模式(2)--简单工厂模式 简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定 ...
- 设计模式之简单工厂模式(C#版)
设计模式之简单工厂模式(C#版) 简介 假设有个女朋友 总结 简介 我用最简洁而直接的方式来描述一下,什么是简单工厂模式.一句话就是,工厂类使用switch case语句返回特定类型. 下面,我们用一 ...
- 大牧絮叨设计模式:简单工厂模式
文章目录 1. 简单工厂模式概述 1.1.简单工厂模式核心组件 1.2.简单工厂模式优缺点 2.` Java`实现 公共父类定义 产品具体实现类 简单工厂定义 代码运行测试: 3. `Python`实 ...
- 设计模式之简单工厂模式(Java 实现)
设计模式之简单工厂模式(Java 实现) 本文首发于http://www.imooc.com/wiki/Designlesson/factory.html 简单工厂模式是平时开发过程中最常见的设计模式 ...
- 工厂设计模式、简单工厂设计模式、抽象工厂设计模式
一.简单工厂设计模式.工厂设计模式,抽象工厂设计模式总体分析 简单工厂模式 简单工厂模式不是23种里的一种,简而言之,就是有一个专门生产某个产品的类. 比如下图中的鼠标工厂,专业生产鼠标,给参数0,生 ...
- 设计模式之简单工厂模式
一.概述 工厂模式具体包括了简单工厂.工厂方法.抽象工厂,它们是按照从简单到复杂的顺序排列的,属于设计模式中的创建型,其中简单工厂并不属于GOF的23中模式. 但是它是理解其它的工厂模式的一个很好 ...
最新文章
- OpenCV中6种访问Mat元素的方法
- 当铺密码解密脚本--[GKCTF2020]汉字的秘密
- Mybatis SQL片段
- 3.11 Ext JS 下拉框(Combobox)使用
- 清空image画布并改变大小填充背景色
- android firefox x86,Firefox 26桌面版加强安全 移动版支持x86
- 图像处理四:霍夫变换
- WPF中,输入完密码回车提交 ,回车触发按钮点击事件
- C# Serilog日志框架
- Two sum 二刷
- java thread 几个状态_Java 几种线程状态之间的相互关系
- PDF如何加水印? PDF加水印的方法
- 学习《医学三字经白话解》之医学源流+中风
- 探索AI视觉技术新应用,夸克扫描王首推“离线模式”端侧AI算法提升隐私安全
- 动态路由、OSPF多区域、ABR,ASBR
- JSP学习---jsp简介和理解jsp的本质
- 指数分布与泊松过程(一)
- ubuntu上安装fcitx五笔输入法
- jmeter测试sqlserver数据库
- C语言 农历的万年历,一个完整的日历(含有农历)
热门文章
- mysql unrecognized service问题解决
- IOS打开pdf文件
- 《应届生求职笔试全攻略》学习笔记(八)——主要测试类型详解
- C 不使用其他库生成BMP图片
- C++字符串与C字符串的相互转换问题
- mysql clob 性能_clob加||隐式转换造成的性能问题
- Linux内核源码分析--内核启动之(1)zImage自解压过程(Linux-3.0 ARMv7)
- 是不是每一个型号的单片机都要学一遍
- JAVA对象属性方法的使用
- 【渝粤教育】国家开放大学2018年春季 0222-21T模拟电子电路 参考试题