在设计模式这个体系中,我们听的最多的应该就是工厂模式了。平时面试的时候一般面试官都会问你这个,即是是当初楼主初次面试的时候,那个时候楼主还是为了2K的实习工作而奔波着呢。。。

好了,废话不多说了,接下来,让我们进入今天的正题--简单工厂

首先一步,我们设计一个场景吧!就平时我们的加减乘除怎么样,嗯!就这样说了,那么首先我们先创建一个运算类,我们想想,这个运算类要有什么呢?

一个数学公式,无非就是三种数字吧,两个数字用来作加减乘除运算,一个数字用来保存结果,行为的话那自然就是进行加减乘除的逻辑运算啦!!!

public class Operation{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 GetSum(){double retu = 0;return retu;}}

我们创建了一个Operation类,只有两个属性和一个虚方法,这里解释下虚方法,为什么要定义虚方法,这是为了让子类继承的时候可以去实现它,也就是常说的函数的重写,怎么样,Get到没有。

接下来,我们就要创建子类了,为了满足单一职责当然是加减乘除创建四个类,首先是加法类

public class OperationAdd : Operation{/// <summary>/// 加法/// </summary>/// <returns></returns>public override double GetSum(){double result = 0;result = NumberA + NumberB;return result;}}

然后是减法类

class OperationSub : Operation{/// <summary>/// 减法/// </summary>/// <returns></returns>public override double GetSum(){double result = 0;result = NumberA - NumberB;return result;}}

接下类乘法类

class OperationMul:Operation{/// <summary>/// 乘法/// </summary>/// <returns></returns>public override double GetSum(){double result = 0;result = NumberA * NumberB;return result;}}

最后,是我们的除法类

class OperationDiv : Operation{/// <summary>/// 除法/// </summary>/// <returns></returns>public override double GetSum(){double result = 0;result = NumberA / NumberB;return result;}}

我们可以看到,这四个类中无一例外都继承了Operation运算基类,然后都实现了重写了方法GetSum(),这里插个小知识点,子类重写父类的方法其实就是在扩展父类,这也是我们希望的结果,我们是希望我们自己的程序是可扩展的,怎么就扩展了呢

假如你有一个需求是在方法执行前或者方法执行后加上一些逻辑,你只需要加逻辑,原来老方法的内容可以不管,我们以除法为例子来说,先看代码

class OperationDiv : Operation{/// <summary>/// 除法/// </summary>/// <returns></returns>public override double GetSum(){base.GetSum();double result = 0;result = NumberA / NumberB;return result;}}

这里我加上一条语句base.GetSum();,这条语句就是调用父类中的GetSum方法,这是在父类方法执行后加逻辑,这里我们的父类是没有什么逻辑的,如果想在父类方法执行前加逻辑,我们可以把base.GetSum();方法挪动下,是不是看起来更加的清爽,而且再维护旧系统的时候也能一目了然的知道哪些是自己维护的代码。这里就啰嗦到这,重写和base的用法

好了,言归正传,我们创建完所有的类之后,接下来就是怎么去把它们组合起来了,简单工厂的核心(工厂本来就是把一个个零件组装起来的嘛  哈哈哈)上代码

public class OperationFactory{public static Operation GetOperation(string str){Operation operation = null;switch (str){case "+":operation = new OperationAdd();break;case "-":operation = new OperationSub();break;case "*":operation = new OperationMul();break;case "/":operation = new OperationDiv();break;}return operation;}}

这里,我们创建一个运算工厂类,这个工厂类只有一个方法,这个方法中用到了switch  case ,我们简单的讲解下吧,首先,我们看case有四个运算符,其实就是判断字符串是否为这四个字符,如果是+,就实例化我们上面创建的对应的类,然后这个方法是返回一个Operation类,就是这样,简单工厂的工厂创建完成了,接下来让我们来调用测试下,上代码

class Program{static void Main(string[] args){Operation operation = null;Console.WriteLine("请输入你要输入的第一个数字按回车结束");double str = Convert.ToDouble(Console.ReadLine());Console.WriteLine("请输入你要输入的第二个数字按回车结束");double strB = Convert.ToDouble(Console.ReadLine());Console.WriteLine("最后请输入你要进行运算的符号按回车结束");string strSum = Console.ReadLine();operation = OperationFactory.GetOperation(strSum);if (operation == null) return;operation.NumberA = str;operation.NumberB = strB;double sum = operation.GetSum();Console.WriteLine("结果是:{0}", sum);Console.ReadKey();}}

这里很明显了,获取三个用户输入的内容,然后赋值判断加运算,这里就是简单工厂的全部了,核心就是那个工厂类。

转载于:https://www.cnblogs.com/liuhuimh/p/10587085.html

设计模式----简单工厂相关推荐

  1. JavaScript设计模式--简单工厂模式例子---XHR工厂

    JavaScript设计模式--简单工厂模式例子---XHR工厂 第一步,Ajax操作接口(目的是起一个接口检测作用) (1)引入接口文件 //定义一个静态方法来实现接口与实现类的直接检验 //静态方 ...

  2. 三角形圆形创建与擦除java_设计模式---------------简单工厂模式

    设计模式---------------简单工厂模式 一.题目(Question) 使用简单工厂模式设计一个可以创建不同几何形状(如圆形.方形和三角形等)的绘图工具,每个几何图形都要有绘制draw()和 ...

  3. 设计模式——简单工厂

    设计模式--简单工厂 工厂角色: package designpattern.creation.simplefactory;/** * 此处的工厂简单写成一个类,因为(简单工厂的工厂)不会有继承或拓展 ...

  4. Spring常用设计模式--简单工厂模式

    本专栏内容参考自:咕泡学院Tom老师的<Spring5核心原理与30个类手写实战>,仅作个人学习记录使用,如有侵权,联系速删. 工厂模式的由来:   在现实生活中我们都知道,原始社会自给自 ...

  5. 设计模式—简单工厂模式

    前言 简单工厂模式是一种比较容易理解的设计模式 简单工厂模式介绍 在设计模式中,简单工厂模式可以理解为负责生产对象的一个类,当使用new 关键字创建一个对象时,此时该类就依赖于这个对象,也就是他们间的 ...

  6. 设计模式 - 简单工厂模式

    文章目录 设计模式 - 简单工厂模式 1.意图 2.实例 1.创建颜色接口 - 定义生产的产品是什么 2.创建颜色枚举 - 定义生产哪些类型的产品 3.根据颜色枚举创建产品 - 根据产品清单生产产品 ...

  7. Android工厂设计模式(简单工厂,工厂方法,抽象工厂,BitmapFactory简单工厂分析,Retrofit抽象工厂分析)

    文章目录 创建型设计模式(简单工厂,工厂方法,抽象工厂) 一.简单工厂模式 引出简单工厂模式 二.工厂方法模式 三.抽象工厂模式 Android源码中用到的工厂模式举例 一.BitmapFactory ...

  8. 设计模式--简单工厂(Factory)模式

    温故而知新,看了以前写的博文<Asp.net读取Excel文件 2>http://www.cnblogs.com/insus/archive/2011/05/05/2037808.html ...

  9. 设计模式--简单工厂模式

    什么是工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对 ...

  10. C#设计模式--简单工厂模式

    设计模式: 简单工厂模式(Simple Factory Pattern) 介绍:简单工厂模式不是Gof23种设计模式之一.但它在实际的编程中经常被用到,而且思想也非常简单,下面简单举例说明: 简单工厂 ...

最新文章

  1. jQuery中slice()方法用法实例
  2. angular @ViewChild使用
  3. Tensorflow2.0与Tensorflow1.0的理解
  4. Serial.println()和Serial.print() (Arduino编程)
  5. 滑动窗口限流 java_Spring Boot 的接口限流算法优缺点深度分析
  6. 谷歌笔试题(Google十二岁生日晚)
  7. 前端学习(1033):jquery插件-图片懒加载
  8. springboot整合minio最新版
  9. windows10环境下载labelImg及使用方法
  10. linux_ELF静态注入
  11. php获取当前页面数据,ThinkPHP如何获取当前页面URL信息?
  12. 2022春节法律思维
  13. 在内核中如何获得系统的日期和时间
  14. IDEA启动项目报错:非法字符: ‘\ufeff‘
  15. 转:oracle常见重要视图-v$sql,v$sql_plan,v$sqltext,v$sqlarea,v$sql_plan_statistcs
  16. Linux系统无法载入nvidia-smi驱动
  17. LUA C API接口
  18. .net cms系统
  19. 可视化 | 人物画像的设计方法
  20. 在Linux下如何根据域名自签发OpenSSL证书与常用证书转换

热门文章

  1. linux执行多个命令_您必须知道的前50多个Linux命令
  2. Valid Palindrome leetcode125
  3. (免费领取Java面试题)Java面试中经常被问到的问题
  4. 想要学习C++,到底能从事哪种行业?
  5. 6.相对与绝对目录 cd mkdir rmdir rm
  6. Android 跳转权限设置界面的终极方案
  7. js进阶 10-4 jquery中基础选择器有哪些
  8. EventBus,轻松实现跨组件跨线程通信
  9. 交通运输业面临视频监控存储挑战
  10. LoadRunner调用Oracle存储过程