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

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

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

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

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

如何设计:

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

 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

 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

 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

 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

 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

 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 }


运行结果:

时间: 2024-08-07 02:10:21

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

设计模式: 简单工厂模式

引入: 在我们的思维中,会有一种习惯,当遇到某种问题时,会直接考虑用最直接的语言去去实现它,而往往忽略了整个程序的可维护性.可扩展性. 比如,我们写一个基本的计算器功能,要求能计算四则运算,大家或许会直接写: public class ProgramDemo{ public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(

设计模式之二(简单工厂模式)

原文:设计模式之二(简单工厂模式) 前言 简单工厂模式根据提供的数据或者参数返回几个可能的类中的一个实例,说通俗点有点像面向对象编程中的多态性,一个基类,有多个派生类,在另外的调用程序中,根据参数来决定返回这个基类的哪个具体的派生类,返回值为基类类型,因为基类的引用可以指向派生类对象,而且这些所有的派生类都包含有基类的函数,也就是说派生类中有相同的函数,但是函数的实现可能不同. 下面我只是来演示一下简单工厂模式,代码不会太复杂.所以大家可以使用Submile Text工具. 使用方法博客文章链接

以不变应万变——简单工厂模式

定义   从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现 理解   简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例. 角色和职责 工厂(Creator)角色   简单工厂模式的

实例讲解PHP设计模式编程中的简单工厂模式_php实例

简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂对象决定创建出那一种产品类的实例. 1.工厂模式的几种形态工厂模式专门负责将大量有共同接口的类实例化.工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类.工厂模式有以下几种形态: (1)简单工厂(Simple Factory)模式,又称静态工厂方法模式(Static Factory Method Pattern). (2)工厂方法(Factory Meth

简单工厂模式(设计模式02)

作者:jiankunking 出处:http://blog.csdn.net/jiankunking 1.定义 简单工厂模式(Simple Factory Pattern)属于类的创建型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),但不属于23种GOF设计模式之一,是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 2.基本简介 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个

PHP中“简单工厂模式”实例代码讲解_php技巧

简单工厂模式: ①抽象基类:类中定义抽象一些方法,用以在子类中实现 ②继承自抽象基类的子类:实现基类中的抽象方法 ③工厂类:用以实例化对象 看完文章再回头来看下这张图,效果会比较好 采用封装方式 复制代码 代码如下: <?php class Calc{ /** * 计算结果 * * @param int|float $num1 * @param int|float $num2 * @param string $operator * @return int|float */ public func

Ruby中使用设计模式中的简单工厂模式和工厂方法模式_ruby专题

之前有看过<ruby设计模式>,不过渐渐的都忘记了.现在买了一个大话设计模式,看起来不是那么枯燥,顺便将代码用ruby实现了一下. 简单工厂模式: # -*- encoding: utf-8 -*- #运算类 class Operation attr_accessor :number_a,:number_b def initialize(number_a = nil, number_b = nil) @number_a = number_a @number_b = number_b end d

iOS设计模式之简单工厂模式

简单工厂模式 基本理解 到底要实例化谁,将来会不会增加实例化的对象,比如计算器增加开根运算,这是很容易变化的地方,应该考虑用一个单独的类来做这个创造实例的过程,这就是工厂. 通过使用工厂模式,我们可以降低耦合度,做到对扩展开放,对修改封闭.如果需要再增加其他的方法,我们只需要重新构建一个子类即可. 例子 这里简单介绍一下. 比如我们要做一个计算器,我们会写几个运算类,比如加法.乘法.除法和减法.但是我们在使用这些运算类的时候,我们没有必要去在客户端每次用switch判断或者if判断.我们只需要传

PHP中简单工厂模式实例讲解

简单工厂模式: ①抽象基类:类中定义抽象一些方法,用以在子类中实现 ②继承自抽象基类的子类:实现基类中的抽象方法 ③工厂类:用以实例化对象 看完文章再回头来看下这张图,效果会比较好 采用封装方式  代码如下 复制代码 <?php     class Calc{         /**          * 计算结果          *          * @param int|float $num1          * @param int|float $num2          * @