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

设计模式-工厂

作者: Sweet丶 | 来源:发表于2020-10-04 15:51 被阅读0次

    这里介绍一下设计模式中的简单工厂模式工厂方法模式抽象工厂模式在iOS中的实现。这三个设计模式是有演变关系的;在开发中可以根据情况选择。

    一、简单工厂模式
    1. 怎么引出的?
      假设目前的情况是:我们在一个类中有一个方法生产面包,另一个方法生产蛋糕,这两个方法的业务逻辑是不一样的;我们在使用本类中使用时就可以分别调用这两个方法来完成业务,但是如果我们要在别的类中也能够实现这两个功能时,我们需要将方法抽取到不同的类中去实现。
    // 这里只列举生产蛋糕的方法抽取到一个类
    // 抽取的父类
    @interface Operation : NSObject
    - (void)productFood;
    @end
    @implementation Operation
    - (void)productFood{}
    @end
    
    // 生产蛋糕的类
    @interface OperationCake : Operation
    @end
    @implementation OperationCake
    - (void)productFood{
        // do some things 执行业务逻辑
        NSLog(@"蛋糕生产成功!");
    }
    @end
    

    简单工厂模式做法就是由一个工厂类(Factory)来提供方法来创建实际的生产线对象,我们在使用时面向这个工厂类就可以了,创建出来的对象调用生产方法就可以执行对应的逻辑生产出蛋糕。

    // 工厂类
    @implementation Factory
    // 创建一条生产线
    + (Operation *)createOperation:(OperationType)type{
        switch (type) {
            case OperationTypeCake:
                return [[OperationCake alloc] init];
                break;
            case OperationTypeBread:
                return [[OperationBread alloc] init];
                break;
                
            default:
                break;
        }
    }
    @end
    

    使用方法:

    Operation *cakeMaker = [Factory createOperation:OperationTypeCake];
        [cakeMaker productFood];
    
    二、工厂方法模式

    由简单工厂演变而来的,因为在简单工厂使用时,生产线很多的情况下,不方便拓展,尤其是某些生产线可以归为同一种类时。
    工厂方法模式的做法是:将上面的创建流水线的的业务改为由对应的工厂类来实现,这样我们使用时,直接使用对应的工厂来创建属于它的流水线。

    //  工厂类
    @interface Factory : NSObject
    // 创建一条生产线
    + (Operation *)createOperation;
    @end
    
    // 蛋糕工厂类
    @interface FactoryCake : Factory
    @end
    @implementation FactoryCake
    
    + (Operation *)createOperation{
        return [[OperationCake alloc] init];
    }
    @end
    

    使用时

    Operation *cakeMaker2 = [FactoryCake createOperation];
        [cakeMaker2 productFood];
    
    三、抽象工厂模式

    在工厂方法模式中,如果我们使用时每次需要知道工厂类,就会很麻烦,所以进而会在工厂类中增加一个创建对应工厂的方法。

    // 创建对应的工厂
    + (Factory *)createFactory:(FactoryType)type{
        switch (type) {
            case FactoryTypeCake:
                return [[FactoryCake alloc] init];
                break;
            case FactoryTypeBread:
                return [[FactoryBread alloc] init];
                break;
                
            default:
                break;
        }
    }
    

    使用时:

    Factory *fac = [Factory createFactory:FactoryTypeCake];
        Operation *cakeMaker3 = [fac createOperation];
        [cakeMaker3 productFood];
    

    在iOS中可以NSNumber就是抽象工厂方法设计模式。
    【iOS类簇】工厂设计模式(Class Cluster)

    相关文章

      网友评论

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

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