我们以做一个计算器为例,给大家介绍简单工厂的应用:

效果:

这里我们使用 继承 ,虚方法, 简单工厂的设计模式来完成

首先,我们除了搭好窗体外,我们应该把我们的一些类准备好:

1.计算的父类Calculation

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 计算器_简单工厂_
{
//父类(虚) 计算类
public abstract class Calculation
{
//第一个操作数
public double Numleft { get; set; }
//第二个操作数
public double NumRight { get; set; }
//运算符
public string Operator { get; set; }
//虚方法
public abstract double Cal();
}
}

2.然后就是,加,减,乘,除 的子类

01.加法类 Add

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 计算器_简单工厂_
{
//加法
public class Add:Calculation
{
public override double Cal()
{
double result = Numleft + NumRight;
return result;
}
}
}

02.减法类 Sub

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 计算器_简单工厂_
{
//减法
public class Sub:Calculation
{
public override double Cal()
{
double result = Numleft - NumRight;
return result;
}
}
}

03.乘法类 Mul

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 计算器_简单工厂_
{
//减法类
public class Mul:Calculation
{
public override double Cal()
{
double result = Numleft * NumRight;
return result;
}
}
}

04.除法类 Div

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 计算器_简单工厂_
{
//除法类
public class Div:Calculation
{
public override double Cal()
{
//除法中 除数是不能为0
if (NumRight==)
{
throw new Exception("除数不能为0");
}
double result = Numleft / NumRight;
return result;
}
}
}

3.最后就是准备 “简单工厂” 的类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 计算器_简单工厂_
{
//工作类
public class Factory
{
public static Calculation Cal(string ope)
{
//初始化父类对象
Calculation calculation = null;
//根据传来的运算符实例化
switch (ope)
{
case"+":
calculation = new Add();
break;
case "-":
calculation = new Sub();
break;
case "*":
calculation = new Mul();
break;
case "/":
calculation = new Div();
break; }
//返回实例化的对象
return calculation;
}
}
}

4.一切准备好后,我们来看看在窗体中是如何用的呐!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace 计算器_简单工厂_
{
public partial class FrmMain : Form
{
public FrmMain()
{
InitializeComponent();
}
private void btnCal_Click(object sender, EventArgs e)
{
//外层try作用:判断输入的操作数是否正确
try
{
//分别获得要计算的值
double num1 = Convert.ToDouble(txtLift.Text);
double num2 = Convert.ToDouble(txtRight.Text);
string ope = cmbstring.Text;
//把获得的运算符传达“简单工厂”
Calculation cal = Factory.Cal(ope);
double result = ; //赋值(最会忘记)
cal.Numleft = num1;
cal.NumRight = num2; //内层try作用:判断当除法时除数是否为0
try
{
//知道需求,开始进行相应工作
result = cal.Cal();
}
catch (Exception ex)
{ MessageBox.Show(ex.Message);
}
//显示结果
label1.Text = result.ToString();
}
catch (Exception ex)
{
//如果输入不正确,则系统会提示“输入字符串的格式不正确”
MessageBox.Show(ex.Message); } }
}
}

我们来总结一下我们“简单工厂”类的一些注意点吧:

1.方法是静态的,调用的时候不需要实例化

2.方法的返回值是父类 类型

3.方法是有参的

两种设计模式(1)==>>“简单工厂”的更多相关文章

  1. Spring主要用到两种设计模式

    Spring主要用到两种设计模式 1.工厂模式 Spring容器就是实例化和管理全部Bean的工厂. 工厂模式可以将Java对象的调用者从被调用者的实现逻辑中分离出来. 调用者只关心被调用者必须满足的 ...

  2. Spring 实现两种设计模式:工厂模式和单态模式(单例模式)

    本文摘自:李刚 著 <轻量级 Java EE企业应用实战 Struts2+Spring+hibernate整合开发> 在Spring 中大量使用的以下两种设计模式:工厂模式和单态模式. 工 ...

  3. 两种设计模式和XML解析

    两种设计模式 1.单例模式 模式的保证步骤:单例(是说在一个类中只能有一个对象)三条件 1.1类构造设置私有  private  Play() { } 1.2 定义一个私有的静态的  类类型  变量 ...

  4. Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)

    jquery提供的serialize方法能够实现. $("#searchForm").serialize();但是,观察输出的信息,发现serialize()方法做的是将表单中的数 ...

  5. 设计模式之简单工厂模式(Simple Factory)

    原文地址:http://www.cnblogs.com/BeyondAnyTime/archive/2012/07/06/2579100.html 今天呢,要学习的设计模式是“简单工厂模式”,这是一个 ...

  6. C#设计模式(2)-简单工厂模式

    引言 上一遍中介绍了设计模式中的单例模式-C#设计模式(1)-单例模式,本篇将介绍简单工厂模式,也是比较容易理解的一种模式: 简单工厂模式简介 什么是简单工厂模式? 定义一个工厂类,它可以根据参数的不 ...

  7. C#设计模式(2)——简单工厂模式(转)

    C#设计模式(2)——简单工厂模式   一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理 ...

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

    iOS设计模式 - (3)简单工厂模式           by Colin丶 转载请注明出处:              http://blog.csdn.net/hitwhylz/article/ ...

  9. PHP设计模式:简单工厂

    示例代码详见https://github.com/52fhy/design_patterns 简单工厂 简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例. 也就是使用的 ...

随机推荐

  1. GCC 编译使用动态链接库 LD

    可以把当前路径加入 /etc/ld.so.conf中然后运行ldconfig,或者以当前路径为参数运行ldconfig 2.把当前路径加入环境变量LD_LIBRARY_PATH中3. 如果你觉得不会引 ...

  2. JVM性能分析与优化

    JVM性能分析与优化: http://www.docin.com/p-757199232.html

  3. android 开发 - 对图片进行虚化(毛玻璃效果,模糊)

    概述 IPAD,IPHONE上首页背景的模糊效果是不是很好看,那么在 Android中如何实现呢.我通过一种方式实现了这样的效果. 开源库名称:anroid-image-blur 一个android ...

  4. Spark和hadoop的关系

    1. Spark VSHadoop有哪些异同点? Hadoop:分布式批处理计算,强调批处理,常用于数据挖掘和数据分析. Spark:是一个基于内存计算的开源的集群计算系统,目的是让数据分析更加快速, ...

  5. HIVE: SerDe应用实例

    数据文件内容 id=123,name=steven id=55,name=ray 期望输出格式 123 steven 55 ray 1. 创建表, 用正则表达式的形式指定格式 create table ...

  6. joomla3.1安装不通过Magic Quotes GPC解决方法

    测试安装下joomla 3.1稳定版,但是不能成功,Magic Quotes GPC始终显示 否红色,这样就安装不了了! 要解决这个很简单,开启Magic Quotes GPC就行了,于是找到php. ...

  7. Hadoop第8周练习—Pig部署及统计访问日志例子

    :搭建Pig环境 :计算每个IP点击次数 内容 运行环境说明 1.1     硬软件环境 线程,主频2.2G,6G内存 l  虚拟软件:VMware® Workstation 9.0.0 build- ...

  8. Action接收页面传来的参数方法

    接收页面传来的参数方法 1.第一种:在action中设置相应的变量 在相应的action中设置与将要传进来的参数名相同的变量 eg: 页面传给后台两个参数 name=chance & age ...

  9. JAVA生成随机数种子的方法

    Java里面有一个随机函数——Random,刚开始只是知道这个函数具有随机取值的作用,于是上网搜索了资料一番,做了一下一些关于Random函数的总结:   Java中存在着两种Random函数: 一. ...

  10. javascript中&&和||的区别

    javascript中&&和||的区别 &&和||操作符两边不是布尔类型时,系统会转换成布尔类型值再计算(空字符串.null.0都会被转成false),结果本身不变. ...