美文网首页
抽象工厂(Abstract Factory)

抽象工厂(Abstract Factory)

作者: long弟弟 | 来源:发表于2022-09-10 00:37 被阅读0次

    抽象工厂

    意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

    工厂方法只能生产一个产品(单个产品)
    抽象工厂可以一下生产一个产品族(里面有很多产品组成)

    抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。

    抽象工厂.jpg

    角色和职责

    1. 抽象工厂(Abstract Factory)
      抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。
    2. 具体工厂(Concrete Factory)
      具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象
    3. 抽象(AbstractProduct)
      抽象模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
    4. 具体产品(ConCreteProduct)
      抽象模式所创建的具体实例对象。

    代码示例

    #import <Foundation/Foundation.h>
    //抽象产品A
    @interface AbstractProductA : NSObject
    - (void)anOperation;
    @end
    @implementation AbstractProductA
    @end
    //抽象产品B
    @interface AbstractProductB : NSObject
    - (void)anOperation;
    @end
    @implementation AbstractProductB
    @end
    //产品A
    @interface AProduct : AbstractProductA
    @end
    @implementation AProduct
    - (void)anOperation {
        NSLog(@"A Product");
    }
    @end
    //产品AA
    @interface AAProduct : AbstractProductA
    @end
    @implementation AAProduct
    - (void)anOperation {
        NSLog(@"AA Product");
    }
    @end
    //产品B
    @interface BProduct : AbstractProductB
    @end
    @implementation BProduct
    - (void)anOperation {
        NSLog(@"B Product");
    }
    @end
    //产品BB
    @interface BBProduct : AbstractProductB
    @end
    @implementation BBProduct
    - (void)anOperation {
        NSLog(@"BB Product");
    }
    @end
    //抽象工厂
    @interface AbstractFactory : NSObject
    - (AbstractProductA *)createProduct1;
    - (AbstractProductB *)createProduct2;
    @end
    @implementation AbstractFactory
    @end
    //A工厂
    @interface AFactory : AbstractFactory
    @end
    @implementation AFactory
    - (AbstractProductA *)createProduct1 {
        return [[AProduct alloc] init];
    }
    - (AbstractProductA *)createProduct2 {
        return [[AAProduct alloc] init];
    }
    @end
    //B工厂
    @interface BFactory : AbstractFactory
    @end
    @implementation BFactory
    - (AbstractProductB *)createProduct1 {
        return [[BProduct alloc] init];
    }
    - (AbstractProductB *)createProduct2 {
        return [[BBProduct alloc] init];
    }
    @end
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            AbstractFactory *af = nil;
            af = [[AFactory alloc] init];
            [[af createProduct1] anOperation];
            [[af createProduct2] anOperation];
            NSLog(@"生产:A、AA");
            af = [[BFactory alloc] init];
            [[af createProduct1] anOperation];
            [[af createProduct2] anOperation];
            NSLog(@"生产:B、BB");
        }
        return 0;
    }
    //输出
    /*
    A Product
    AA Product
    生产:A、AA
    B Product
    BB Product
    生产:B、BB
    */
    

    优点

    可以一下生产一个产品族。一个工厂负责创建多个不同类型的产品。

    缺点

    以代码为例,抽象工厂类目前只能生产createProduct1和createProduct2,生产更多的产品的话需要修改该抽象工厂类及具体工厂类!产品线是写死的!

    相关文章

      网友评论

          本文标题:抽象工厂(Abstract Factory)

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