设计模式之—简单工厂模式<Simple Factory Pattern >
简单工厂模式结构图:
简单工厂模式以简单的加减乘除运算为例:
运算符类(Operation):
namespace CalcTest.Simple_Factory_patterns
{
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 GetResult()
{
double result = ;
return result;
}
}
}
加法类(Add):继承于运算符类(Operation)
namespace CalcTest.Simple_Factory_patterns
{
class Add :Operation
{
public override double GetResult()
{
return NumberA + NumberB;
}
}
}
减法类(Subtraction):继承于运算符类(Operation)
namespace CalcTest.Simple_Factory_patterns
{
class Subtraction : Operation
{
public override double GetResult()
{
return NumberA - NumberB;
}
}
}
乘法类(Multiplacation):继承于运算符类(Operation)
namespace CalcTest.Simple_Factory_patterns
{
class Multiplication : Operation
{
public override double GetResult()
{
return NumberA * NumberB;
}
}
}
除法类(Division):继承于运算符类(Operation)
namespace CalcTest.Simple_Factory_patterns
{
class Division : Operation
{
public override double GetResult()
{
if (NumberB == )
{
throw new Exception("除数不能为0");
}
return NumberA / NumberB;
}
}
}
运算符工厂类(OperationFactory):实例合适的对象,通过多态返回父类的方式实现计算结果
namespace CalcTest.Simple_Factory_patterns
{
class OperationFactory
{
public static Operation createOperation(string operate)
{
Operation oper = null;
switch (operate)
{
case "+":
oper = new Add();
break;
case "-":
oper = new Subtraction();
break;
case "*":
oper = new Multiplication();
break;
case "/":
oper = new Division();
break;
}
return oper;
}
}
}
测试类(Main):
namespace CalcTest.Simple_Factory_patterns
{
class TestMain
{
public static void Main(string[] args)
{
Operation oper = null;
//先输入操作符利用简单工厂模式创建类
Console.Write("请输入操作符:(+、-、*、/)");
string operate = Console.ReadLine();
oper = OperationFactory.createOperation(operate); Console.Write("请输入数字A:");
oper.NumberA = Convert.ToDouble(Console.ReadLine()); Console.Write("请输入数字B:");
oper.NumberB = Convert.ToDouble(Console.ReadLine());
double result = oper.GetResult();
Console.WriteLine("结果为:" + result);
Console.ReadLine();
}
}
}
简单工厂模式操作结束!
设计模式之—简单工厂模式<Simple Factory Pattern >的更多相关文章
- 【设计模式】简单工厂模式 Simple Factory Pattern
简单工厂模式Simple Factory Pattern[Simple Factory Pattern]是设计模式里最简单的一个模式,又叫静态工厂模式[Static Factory Pattern], ...
- 设计模式之简单工厂模式(Simple Factory Pattern)
一.简单工厂模式的由来 所有设计模式都是为解决某类问题而产生的,那么简单工厂模式是为解决什么问题呢?我们假设有以下业务场景: 在一个学生选课系统中,文科生用户选课时,我们要获得文科生的所有课程列表:理 ...
- 【UE4 设计模式】简单工厂模式 Simple Factory Pattern
概述 描述 又称为静态工厂方法 一般使用静态方法,根据参数的不同创建不同类的实例 套路 创建抽象产品类 : 创建具体产品类,继承抽象产品类: 创建工厂类,通过静态方法根据传入不同参数从而创建不同具体产 ...
- Golang设计模式—简单工厂模式(Simple Factory Pattern)
Golang设计模式--简单工厂模式 背景 假设我们在做一款小型翻译软件,软件可以将德语.英语.日语都翻译成目标中文,并显示在前端. 思路 我们会有三个具体的语言翻译结构体,或许以后还有更多,但现在分 ...
- 大白话简单工厂模式 (Simple Factory Pattern)
大白话简单工厂模式 (Simple Factory Pattern) 从买车经历说起 毕业两年,码农张小两口无法忍受挤公交,凌晨起床抢火车票的痛苦,遂计划买车.逛了多家4S店,最终定下日产某车型的轿车 ...
- 设计模式之简单工厂模式Simple Factory(四创建型)
工厂模式简介. 工厂模式专门负责将大量有共同接口的类实例化 工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类. 工厂模式有三种形态: 1.简单工厂模式Simple Factory ...
- Net设计模式实例之简单工厂模式(Simple Factory Pattern)
一.简单工厂模式简介(Bref Introduction) 简单工厂模式(Simple Factory Pattern)的优点是,工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类, ...
- 简单工厂模式(Simple Factory Pattern)
简单工厂模式概述 定义:定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类 在简单工厂模式中用于被创建实例的方法通常为静态(static)方法,因此简单工厂模式又被 ...
- C#设计模式-1简单工厂模式Simple Factory)
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 简单的工 ...
随机推荐
- 『重构--改善既有代码的设计』读书笔记----Replace Method with Method Object
有时候,当你遇到一个大型函数,里面的临时变量和参数多的让你觉得根本无法进行Extract Method.重构中也大力的推荐短小函数的好处,它所带来的解释性,复用性让你收益无穷.但如果你遇到上种情况,你 ...
- 【转】Hibernate和ibatis的比较
1. 简介 Hibernate是当前最流行的O/R mapping框架.它出身于sf.net,现在已经成为Jboss的一部分了.iBATIS是另外一种优秀的O/R mapping框架,现已改名叫myB ...
- 深入了解使用egret.WebSocket
概念 本教程不讲解TCP/IP协议,Socket属于哪层,消息包体怎么设计等,主讲 egret.WebSocket 使用示例 与 protobuf 使用示例. 在使用egret.WebSocket之前 ...
- 0627 CMD运行php代码
打开cmd: 如何在这里面运行php代码 1.调整环境变量:右击电脑->属性->高级系统设置->环境变量 2.新建环境变量: 上部分的用户变量----- 变量名:PHP_HOME ...
- JQUERY1.9学习笔记 之基本过滤器(十二) 根元素选择器
根元素选择器 描述:选择文档的根节点元素.jQuery( ":root" ) 例:显示文档根节点标签名. <!DOCTYPE html><html lang=&q ...
- php中json_decode()和json_encode()
1.json_decode() json_decode (PHP 5 >= 5.2.0, PECL json >= 1.2.0) json_decode — 对 JSON 格式的字符串进行 ...
- Llinux-apache安装
第四章 构建LAMP网站服务平台 实验报告 1.安装apache服务器软件及相关组件 查看系统中是否安装apache服务相关的软件包: [root@www /]# rpm -qa | grep ht ...
- python中的builtin函数详解-第二篇
classmethod(function) 这里不过多说明这个builtin方法的具体用法,python的文档和help函数已经给了这个方法充足的使用说明,所以我这里要说的时关于 classmetho ...
- 简化的nginx多进程模型demo
//version 1:以下代码仅演示nginx多进程模型[test@vm c]$ cat mynginx.c#include <stdio.h> #include <string. ...
- Android 数据库读取数据显示优化 Application [6]
Application和Activity,Service一样是android框架的一个系统组件, 当android程序启动时系统会创建一个application对象,用来存储系统的一些信息. 通常我们 ...