美文网首页
iOS 抽象工厂模式

iOS 抽象工厂模式

作者: LikeSomeBody | 来源:发表于2017-10-18 10:54 被阅读42次

    一:概念

    抽象工厂是工厂方法模式的升级版本,他用来创建一组相互依赖的对象。

    二: 应用说明

    正如DEMO   abstractFactoryMode Group 中所说。

     也就是说当每个抽象产品都有多于一个的具体子类的时候(apple有型号northApple和SouthApple两种。 而bannana 也有两种),工厂角色怎么知道实例化哪一个子类呢?这时候我使用了抽象工厂模式。 抽象的工厂 对应于 有多个具体子类的 抽象产品。这也是 抽象工厂 和 普通工厂方法模式的区别。

    工厂方法模式:

    一个抽象产品类,可以派生出多个具体产品类。

    一个抽象工厂类,可以派生出多个具体工厂类。

    每个具体工厂类只能创建一个具体产品类的实例。

    抽象工厂模式:

    多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。

    一个抽象工厂类,可以派生出多个具体工厂类。

    每个具体工厂类可以创建多个具体产品类的实例。

    区别:

    工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。

    工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

    三: 

    抽象产品 Fruit  - > 抽象产品 apple / banana  -> northapple southapple northbanana southBanana

    相比

    抽象产品 BZ   ->  具体产品 BZ550  BZ520 系列。   二者的产品线区别就能看出抽象工厂和普通工厂的区别了。

    下面来介绍抽象工厂 。 抽象类这里我们使用一个 协议Protocol 来实现。 在Java 中可以使用 @interface 来实现

    #import

    @protocolFruit

    /**

    采集 水果

    */

    - (void)get;

    @end

    然后是 抽象产品  Apple

    #import

    #import"Fruit.h"

    @interfaceApple :NSObject

    - (void)get;

    @end

    还有抽象的产品类 banana

    #import

    #import"Fruit.h"// 水果协议

    @interfaceBanana :NSObject

    - (void)get;

    @end

    具体产品类 我就不列举了。

    抽象工厂:  在java 中我们可以使用  @interface 来代替 就是一个接口。

    #import

    @protocolFruit;

    @protocolFruitFactory

    - (id)getApple;

    - (id)getBanana;

    @end

    具体工厂类:

    #import

    #import"FruitFactory.h"

    @interfaceNorthFactory :NSObject

    @end

    @implementationNorthFactory

    - (id)getApple

    {

    NorthApple*northApple = [[NorthApplealloc]init];

    returnnorthApple;

    }

    - (id)getBanana

    {

    NorthBanana*northBanana = [[NorthBananaalloc]init];

    returnnorthBanana;

    }

    @end

    客户端调用代码:

    NorthFactory*northFactory = [[NorthFactory alloc]init];

    id northApple = [northFactory getApple];

    [northApple get];

    id northBanana = [northFactorygetBanana];

    [northBanana get];

    SouthFactory*southFactory = [[SouthFactory alloc]init];

    id southApple = [southFactory getApple];

    [southApple get];

    id southBanana = [southFactory getBanana];

    [southBanana get];

    通过这些就可以看出二者的区别。 

    相关文章

      网友评论

          本文标题:iOS 抽象工厂模式

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