简单工厂模式--加减乘除运算

学习来自《大话设计模式》

下面基于简单的<加减乘除运算>实例来讲讲实用简单工厂模式:<备注:以后根据认识的加深,可以添加和修改内容>

需求分析:希望程序提供“加减乘除”四种功能。

功能分析:四种功能都是并列的,相互独立的。

拓展分析:很有可能拓展新的功能,比如“开根运算”。

如何设计:

1、根据“功能分析”可以将四种功能都归并一个父类出来,然后创建四个子类继承它,并且提供空的方法(OC中模拟抽象方法或者虚函数),这四个子类分别都要继承并重写实现这个空方法。这样,一个抽象的父类,四个具体实现的子类,就可以形成多态的应用:父类声明,子类创建实例。

2、然后创建一个工厂类与功能的抽象父类相互关联,然后实现根据需求,应用多态来创建功能的实例。

3、拓展:如果需要添加“开根”的功能,只要添加一个继承运算类的子类,然后在简单工厂类创建方法中添加修改一点。

附加代码:

 1 #import <Foundation/Foundation.h>
 2
 3 @interface Operation : NSObject
 4
 5 @property double a;
 6 @property double b;
 7 @property double result;
 8 -(double)getResult:(double)a second:(double)b;
 9
10 @end
11
12 //>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<
13
14 #import "Operation.h"
15
16 @implementation Operation
17
18 -(double)getResult:(double)a second:(double)b{
19     self.a = a;
20     self.b = b;
21     return self.a+self.b;
22 };
23
24 @end

Operation抽象父类

 1 #import "Operation.h"
 2
 3 @interface SubOperation : Operation
 4
 5 @end
 6
 7 //>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<
 8
 9 #import "SubOperation.h"
10
11 @implementation SubOperation
12
13 -(double)getResult:(double)a second:(double)b{
14     self.a = a;
15     self.b = b;
16     self.result = self.a - self.b;
17     return self.result;
18 }
19
20 @end

减法类 继承 Operation抽象父类

 1 #import "Operation.h"
 2
 3 @interface AddOperation : Operation
 4
 5 @end
 6
 7 #import "AddOperation.h"
 8
 9 @implementation AddOperation
10
11 -(double)getResult:(double)a second:(double)b{
12     self.a = a;
13     self.b = b;
14
15     self.result = self.a + self.b;
16     return self.result;
17 };
18
19 @end

加法类 继承 Operation抽象父类

 1 #import "Operation.h"
 2
 3 @interface MulOperation : Operation
 4
 5 @end
 6
 7
 8 #import "MulOperation.h"
 9
10 @implementation MulOperation
11
12 -(double)getResult:(double)a second:(double)b{
13     self.a = a;
14     self.b = b;
15
16     self.result = self.a * self.b;
17     return self.result;
18 }
19 @end

乘法类 继承 Operation抽象父类

 1 #import "Operation.h"
 2
 3 @interface DivOperation : Operation
 4
 5 @end
 6
 7 #import "DivOperation.h"
 8
 9 @implementation DivOperation
10
11 -(double)getResult:(double)a second:(double)b{
12     self.a = a;
13     self.b = b;
14     if (self.b == 0) {
15         NSLog(@"除数不能为0");
16         return 0;
17     }
18     self.result = self.a / self.b;
19     return self.result;
20 }
21
22 @end

除法类 继承 Operation抽象父类

 1 #import <Foundation/Foundation.h>
 2 #import "Operation.h"
 3 @interface OperationFactory : NSObject
 4 +(Operation*)creatOperation:(NSString*)str;
 5 @end
 6
 7 //>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<
 8
 9 #import "OperationFactory.h"
10 #import "AddOperation.h"
11 #import "SubOperation.h"
12 #import "MulOperation.h"
13 #import "DivOperation.h"
14 @implementation OperationFactory
15
16 +(Operation*)creatOperation:(NSString*)str{
17     Operation *oper = NULL;
18     if ([str  isEqual: @"+"]) {
19         oper = [[AddOperation alloc] init];
20     }else if ([str isEqual: @"-"]) {
21         oper = [[SubOperation alloc] init];
22     }else if ([str isEqual: @"*"]) {
23         oper = [[MulOperation alloc] init];
24     }else if ([str isEqual: @"/"]) {
25         oper = [[DivOperation alloc] init];
26     }else {
27         NSLog(@"输入无效的内容");
28     }
29     return oper;
30 }
31
32 @end

OperationFactory 依赖 Operation类

 1 #import <Foundation/Foundation.h>
 2 #import "OperationFactory.h"
 3 int main(int argc, const char * argv[]) {
 4     @autoreleasepool {
 5         // insert code here...
 6         Operation *op = [OperationFactory creatOperation:@"+"];
 7         NSLog(@"简单工厂模式算出结果%f",[op getResult:18 second:8]);
 8         Operation *op2 = [OperationFactory creatOperation:@"/"];
 9         NSLog(@"简单工厂模式算除法%f",[op2 getResult:18 second:0]);
10         NSLog(@"Hello, World!");
11     }
12     return 0;
13 }

main方法

运行结果:

时间: 2024-10-14 04:40:24

简单工厂模式--加减乘除运算的相关文章

简单工厂模式加减乘除器

1 package com.main.cul; 2 import java.util.Scanner; 3 import com.factory.Operation; 4 public class Demo { 5 private static double result; 6 public static void main(String[] argv){ 7 8 try{ 9 10 Scanner in=new Scanner(System.in); 11 System.out.print("

《大话设计模式》——简单工厂模式(Python版)

简单工厂模式(Simple Factory Pattern):是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 例: 使用Python设计一个控制台计算器,要求输入两个数和运算符号,得到运算结果. 1. 初学者写法 class Operation(object): def __init__(self): pass def conver_strNumber(self, strNumber): ''' 将字符串格式的数字,转化成对应格式的数字 :param strNum

简单工厂模式

目前正在看<大话设计模式>,写此系列的文章记录下学习的经过. 简单工厂模式 先看如下代码,使用面向对象的原理实现计算器功能 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

设计模式学习-简单工厂模式

1.什么是简单工厂模式 简单工厂模式属于类的创建模式,又叫做静态工厂模式,是通过专门建立一个类负责创建其他类的实例,被创建的类通常有着共同的父类,之所以称之为工厂,就是因为负责创建其他类的类能够根据传递参数的不同,产生不同的实例,使得程序满足松耦合.重用度高.易修改维护的特点. 2.简单工厂模式的实现 下面举例说明工厂模式,比如说我们要实现一个两个数的size运算,那么如何去设计能过做到我们上面说的特性.首先我们要设定一个运算的终极父类: #include <iostream> #includ

设计模式之创建型模式—— 1.1 简单工厂模式

<?php                  /** * 1.1 简单工厂模式 * * 解决的问题: *  如何解决多个类实例化对象的问题. *  注意:因为是简单工厂模式,所以要实例 *    化的类不能太多,否则请使用1.2节 *    的工厂方法模式. * * 解决方案: *  建立一个工厂(即一个工厂类),通过参数的 *  传递动态决定应该创建哪一个产品类(这些 *  产品类继承自一个父类或接口)的实例. *  *  * 该模式中包含三种角色: *  注:这里的角色指的就是类! *  1

1.python实现设计模式:简单工厂模式

简单工厂模式 1.什么是简单工厂模式? 给定一种输入,通过工厂实例出其合适的对象,称为简单工厂模式 2.逐步引入工厂模式 2.1 小文去面试,公司要求用任意一种面对对象的语言实现了一个计算器程序,功能只是简单的两个数相加或者减,乘,除 他的代码如下 def main(): num1 = int(input('The first number is:')) num2 = int(input('The second number is:')) op = input('The operator is(

工厂模式——简单工厂模式

工厂模式分三类:简单工厂模式.工厂方法模式.抽象工厂模式. 首先介绍比较简单一种工厂模式——简单工厂模式. 我们以计算器作为一个例子来说明工厂模式到底是什么.作为一个几年前大一从C语言起步的初级程序员,到现在写代码的思维还是停留在结构化编程,虽然Java学了有几年了,总是说面向对象面向对象.但是让实现一个计算器的程序,估计大部分人都会以C语言式的结构化编程来写,几个if语句或者一个switch来搞定.我也同样不例外,为了提高自己的编程水平,所以一点点开始学设计模式.其实在很多开源代码里也有很多经

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

定义: 简单工厂模式是一个由工厂来确定创建某种产品的实例. 先看一个简单的例子 package com.zr.pattern.simpleFactory; import java.util.Scanner; /** * 实现计算机控制台程序,要求输入两个数和运算符得到运算结果 * @author zr */ public class Calculator { public static void main(String[] args) { Scanner scanner = new Scanne

iOS设计模式(代码分析系列2:简单工厂模式)

简单工厂模式示例代码下载地址, 1.简述 首先需要说明一下,简单工厂模式不属于23种GOF设计模式之一.它也称作静态工作方法模式,是工厂方法模式的特殊实现(也就是说工厂模式包含简单工厂模式).这里对简单工厂模式进行介绍,是为后面的工厂方法和抽象工厂模式做一个引子. 2.定义 "专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类." 世界上就是由一个工厂类,根据传入的参数,动态地决定创建出哪一个产品类的实例. 3.结构图 简要分析结构图: ConcreteProduct