iOS常用设计模式——简单工厂设计模式

简单工厂设计模式详解

  • 简单工厂设计模式详解

    • 基本概念
    • 结构图
    • 经典的示例
    • 示例代码
    • 优点
    • 缺点
    • 使用条件

基本概念

“专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类。”

世界上就是由一个工厂类,根据传入的参数,动态地决定创建出哪一个产品类的实例。

结构图

ConcreteProduct1和ConcreteProduct2两个产品具有一个共同的父类IProject,简单工厂类为SimpleFactory,负责根据传入的不同参数来决定生产ConcreteProduct1还是ConcreteProduct2产品。

经典的示例

最经典的示例就是运算类,加、减、乘、除四个运算符都继承自父类Operation,有两个属性和一个操作方法,这些加减乘除的对象并不是直接在ViewController中创建,而是根据输入操作符,由简单工厂OperationFactory来创建。

示例代码

(1)创建一个协议OprationProtocol,由父类Operation来遵从该协议

/*
 *  操作方法协议接口
 */
@protocol OperationProtocol <NSObject>
-(double)getResult;
@end

(2)定义加减乘除操作的父类Operation

#import OperationProtocol.h
/*
 *  操作方法父类
 */
@interface Operation : NSObject<operationprotocol>
@property double firstNum;//第一个操作数
@property double secondNum;//第二个操作数
@end

(3)加减乘除实现类,此处以”加”举例说明

//OperationAdd.h文件
#import Operation.h
/*
 *  加法实现类
 */
@interface OperationAdd : Operation
@end

//OperationAdd.m文件
#import "OperationAdd.h"
@implementation OperationAdd
-(double)getResult
{
    double result = 0;
    result = self.firstNum+self.secondNum;//"+"是OperationAdd时候使用,"+-*/"分别对应"加减乘除"
    return result;
}
@end

(4)简单工厂类的代码

//OpeartionFactory.h file
#import Operation.h
#import OperationAdd.h
#import OperationSub.h
#import OperationMultiply.h
#import OperationDivide.h
/*
 *  操作工厂类
 */
@interface OperationFactory : NSObject

//获得操作对象
+(Operation*)createOperate:(NSString*)operateStr;

@end

//OpeartionFactory.m file
#import "OperationFactory.h"
@implementation OperationFactory

+(Operation*)createOperate:(NSString*)operateStr
{
    Operation* oper = nil;
    //根据不同的操作符,创建不同的操作对象,"+-*/"分别对应"加减乘除"
    if ([operateStr isEqualToString:@"+"]) {
        oper = [[OperationAdd alloc] init];
    }else if ([operateStr isEqualToString:@"-"]){
        oper = [[OperationSub alloc] init];
    }else if ([operateStr isEqualToString:@"*"]){
        oper = [[OperationMultiply alloc] init];
    }else if ([operateStr isEqualToString:@"/"]){
        oper = [[OperationDivide alloc] init];
    }
    return oper;
}
@end

(5)客户端代码,在ViewController中使用OperationFactory

 NSString* strFirstNum = self.firstNumTextField.text;
    NSString* strSecondNum = self.secondNumTextField.text;
    Operation* oper;
    oper = [OperationFactory createOperate:self.operationTextField.text];
    oper.firstNum = [strFirstNum doubleValue];
    oper.secondNum = [strSecondNum doubleValue];
    self.resultTextField.text = [NSString stringWithFormat:@%f,[oper getResult]];

通过简单工厂模式的重构,我们就是闲了低耦合度的代码结构,做到了对外扩展开放,对修改关闭。如果再增加任何的操作方法,只需要继承操作方法父类,新建一个操作子类,并且在简单工厂类里面多添加一个else if的判断即可。

优点

简单工厂方法从代码中消除了对应用程序特有类的耦合,调用者不必关心具体实现,取消了常建者的责任,实现了对责任的分割

缺点

工程类集中了所有产品的逻辑,一旦不能正常工作,整个系统受影响,当分类较多时,所有创建工作都在工厂方法中实现,后期扩展较为发杂

使用条件

(1)工厂类负责创建的对象较少时;

(2)客户端只知道传入工厂类的参数,对于如何创建对象的逻辑不必关心时。

时间: 2024-10-11 11:10:23

iOS常用设计模式——简单工厂设计模式的相关文章

1 、设计模式 简单工厂设计模式

客户需要某个产品,客户直接和生成该产品的工厂打交道,工厂具体来负责产品的实现 package cn.javass.dp.simplefactory.example4; /** * 某个接口(通用的.抽象的.非具体的功能的) */ public interface Api { /** * 某个具体的功能方法的定义,用test1来演示一下. * 这里的功能很简单,把传入的s打印输出即可 * @param s 任意想要打印输出的字符串 */ public void test1(String s); }

设计模式- 简单工厂模式、工厂方法模式及其比较

简单工厂模式及实例 前言工大有许多同学是做java的,大家都知道java最大的优点是它的完全OO化和它在多年的发展过程中吸收和总结了许多先进的框架与模式,其中工厂模式就是最常用的模式之一.下面我想将我在学习和实践过程中对工厂模式的认识与了解介绍给大家.由于笔者能力限制,在实践中也没参与过什么大的项目,笔者参与过的项目用到的工厂模式主要是简单工厂模式(Simple Factory)和工厂方法模式(Factory Method),所以笔者在本文主要介绍的是这两种模式.准备知识在OO设计领域,我们知道

java 设计模式--简单工厂

简单工厂设计模式,也就是静待工厂 场景,最近小米6很火啊,我也是小米的粉丝,就拿小米6来说,有黑色,白色,蓝色,三种非常亮的颜色. 先来代码,然后有疑惑,最后解释. 简单工厂设计模式有一个类是抽象类,是黑色,白色,蓝色手机的父类. /**  * 小米手机抽象类  *   * @author sdc  *  */ public abstract class XiaoMiProduction { /**  * 生产小米6的方法  */ public abstract void createXiaoM

java设计模式--简单工厂模式

 简单工厂设计模式 工厂模式就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式.它定义一个用于创建对象的接口,由子类决定实例化哪一个类. 核心知识点如下: (1) 大量共同定义的接口. (2) 由不同的对象去实现该接口. (3) 子类(具体工厂类)决定实例化哪一个类(具体产品类)有着“一对一”的关系. 前言(也算是工厂的一个应用需求场景吧) 最近在构建自动化测试平台,公司需求是:必须在IE,火狐,Google浏览器下回归测试用例.Selenium的webdriv

简单工厂设计模式

说起设计模式,不得不从最简单的简单工厂设计模式开始说起. 简单工厂模式:定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常具有共同的父类.因为简单工厂模式中用于创建的方法是静态的,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式,属于类创建型模式. 首先我们先看看下面这个类图: 在这个类图中,我们可以发现,静态工厂一共有三个对象是不可缺少的 1公共父类(Fruit接口) 2具体的产品类(Apple, Banana) 3静态工厂类(Simp

设计模式 -- 简单工厂(Java&amp;&amp;PHP)

面向对象设计的基本原则                                                                 单一职责系统中的每一个对象应该只有一个单独的职责,所有对象关注的应该是自身职责的完成.基本思想:高内聚,低耦合. 开闭原则一个对象对扩展开放,对修改关闭.基本思想:对类的改动是通过增加代码进行的,而不是修改现有的代码. 里氏替换原则在任意父类出现的地方,都可以使用子类来替代. 依赖注入原则要依赖于抽象,不要依赖于具体的实现.基本思想:在开发中尽量

一口一个设计模式--简单工厂VS工厂VS抽象工厂

前几天一直在准备大学毕业,始终脱不开身,今天终于有时间进行设计模式的研究.咱们今天研究的话题是工厂家族三种设计模式的对比--简单工厂VS工厂VS抽象工厂. 经过细心推敲,我们不难得出:工厂模式是简单工厂的升级版,抽象工厂是工厂模式的升级版,简单工厂+抽象工厂是抽象工厂的升级版.知道了它们之间的宏观关系,下面我带它们从一次次蜕变了解它们为什么是这样的关系. 我们最原始的代码思维是把所有的实现都放在一个类中,功能虽然是实现了,但耦合性非常高,很不方便维护,好比活字印刷术之前的印刷,一个地方需要修改,

设计模式-简单工厂(Demo)

简介 工厂都是创建型模式.用来NEW类的.本文章用一个故事讲述了简单工厂模式 故事 在遥远的未来.chenchen我生活条件不错.但是每天都要做饭.chenchen很懒.只想吃.不想干.所以就请了个女仆给chenchen做饭吃.女仆很牛.chenchen只要说.我要吃牛排.不一会.牛排就做好了放在桌子上.我又说还要红酒.女仆开好红酒.倒好放在桌子上.美滋滋的哈!小肉吃着.小酒喝着.美女陪着此等逍遥快活! 是什么? 代替客户端NEW类.客户端与多个类解耦 为什么要用? 上述故事.因为我做很多饭.要

学习笔记之简单工厂设计模式

工厂设计模式:根据一定的逻辑来负责对象的生产. 简单工厂设计模式:又称为静态工厂方法模式,由一个工厂类,根据传人的参数决定生产哪一种对象 三种角色:工厂角色,抽象产品角色,具体产品角色 故事:水果农场生产水果(苹果和香蕉),一个顾客直接去农场买水果 首先抽象角色: 水果接口 public interface IFruit { void growth(); } 具体产品角色:苹果,香蕉 public class Apple implements IFruit { public void growt