美文网首页
设计模式之工厂模式

设计模式之工厂模式

作者: 简洁的想法 | 来源:发表于2017-06-13 22:57 被阅读13次

概念

工厂(比如,OperationFactory)
抽象产品(比如,Operation)
具体产品(比如,OperationAdd)

简单工厂

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

实际上就是由一个工厂类,根据传入的参数,动态的决定创建出哪一个产品类的实例。
角色
1.工厂类角色(比如,OperationFactory):简单工厂模式的核心,负责根据传入的参数来实例化具体的产品实例。

2.抽象产品角色(比如,Operation):通常是工厂产生具体类的父类(或者是具体类实现的接口)。

3.具体产品角色(比如,OperationAdd):简单工厂模式所创建的任何对象都是这个角色的实例。

流程:工厂类,产生具体的产品实例(继承自基类,并重写基类的方法),使用这个产品实例,调用重写的基类的方法,完成需求。

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

优点:低耦合,每个类负责单独的功能

工厂方法

定义:“定义创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到其子类。”

流程:根据需求,创建不同的工厂(继承自基类),不同的工厂创建不同的操作类(继承自基类),使用这个操作类,调用基类的方法,完成需求。

    FactoryBase* facBase;
    if ([strOperation isEqualToString:@"+"]) {
        facBase = [[AddFactoy alloc] init];
    }else if([strOperation isEqualToString:@"-"]){
        facBase = [[SubFactory alloc] init];
    }else if([strOperation isEqualToString:@"*"]){
        facBase = [[MulFactory alloc] init];
    }else if([strOperation isEqualToString:@"/"]){
        facBase = [[DivFactory alloc] init];
    }    
    Operation* oper;
    oper = [facBase createOperate];
    oper.firstNum = [strFirstNum doubleValue];
    oper.secondNum = [strSecondNum doubleValue];
    self.resultTextField.text = [NSString stringWithFormat:@"%f",[oper getResult]];

抽象工厂

定义:“定义创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到其子类。”

一个工厂,通常不能只产一种产品,可能需要产出一系列产品,这时就需要使用抽象工厂

        // id<AbstractFactory> factory = [[HTML5Factory alloc] init];
        id<AbstractFactory> factory = [[OWCFactory alloc] init];
        
        // 产品1
        id<AbstractLine> line = [factory createLine];
        
        // 产品2
        id<AbstractPie> pie = [factory createPie];
        
        [line drawLine];
        [pie drawPie];

参考

设计模式深入学习IOS版(2)简单工厂模式
IOS设计模式浅析之抽象工厂模式(Abstract Factory)
iOS常用的设计模式

相关文章

  • iOS设计模式(三)之抽象工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(一)之简单工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(二)之工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式之美-适配器模式

    iOS设计模式之美-工厂模式iOS设计模式之美-抽象工厂模式iOS设计模式之美-生成器模式iOS设计模式之美-适配...

  • iOS设计模式之美-抽象工厂模式

    iOS设计模式之美-工厂模式iOS设计模式之美-抽象工厂模式iOS设计模式之美-生成器模式iOS设计模式之美-适配...

  • iOS设计模式之美-工厂模式

    iOS设计模式之美-工厂模式iOS设计模式之美-抽象工厂模式iOS设计模式之美-生成器模式iOS设计模式之美-适配...

  • iOS设计模式之美-生成器模式

    iOS设计模式之美-工厂模式iOS设计模式之美-抽象工厂模式iOS设计模式之美-生成器模式iOS设计模式之美-适配...

  • 设计模式之工厂模式

    设计模式之工厂模式 标签(空格分隔): 设计模式 工厂模式 设计模式的感念 设计模式的应用 工厂设计模式的产生 工...

  • 设计模式系列

    创建型模式: 设计模式之工厂模式(Factory Pattern)设计模式之抽象工厂模式(Abstract Fac...

  • 简单工厂模式

    Android进阶之设计模式 简单工厂模式 简单工厂模式(又叫作静态工厂方法模式), 其属于创建型设计模式,但并不...

网友评论

      本文标题:设计模式之工厂模式

      本文链接:https://www.haomeiwen.com/subject/wxcjqxtx.html