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

iOS设计模式--抽象工厂

作者: live111 | 来源:发表于2016-08-08 21:20 被阅读0次

    抽象工厂与简单工厂最大的区别就是抽象工厂的工厂类也是抽象的。

    在软件设计中,如果客户端想手工创建一个类的对象,那么客户端需要首先知道这个类的细节。更糟的是,一组相关的对象可以在运行时按不同的标准创建得不一样,此时客户端就需要知道全部细节才能创建它们。可以通过抽象工厂方法来解决这个问题。

    抽象工厂提供一个固定的接口,用于创建一系列有关联或相依存的对象,而不必指定其具体类或其创建的细节。客户端与从工厂得到的具体对象之间没有耦合。下图显示了一系列工厂及其产品的可能关系。

    如图所示:

    Client只知道AbstractFactory和AbstractProduct。每个工厂类中,结构与实际操作的细节按黑箱对待。甚至产品也不知道谁将负责承建它们。只有具体工厂知道为客户端创建什么,如何创建。这个模式有趣的一点是,很多时候它都用简单工厂模式来实现。工厂方法把实际的创建过程推迟到重载它的子类中。在类图中,方法createProductA和createProductB是工厂方法。最初的抽象方法什么也不创建。这种抽象非常通用,广泛用于任何需要抽象创建过程的场合。抽象工厂模式常与原型模式,单例模式和享元模式等其他设计模式一起使用。

    抽象工厂与简单工厂在许多方面都非常相似。很多人常常搞不清楚应该在什么时候用哪一个。两个模式都用于相同的目的:创建对象而不让客户端知晓返回了什么确切的具体对象。以下为抽象工厂与简单工厂的对比:


    以下为代码演示:

    首先创建一个基本的工厂类,这个工厂类里面包括两个具体的工厂类,分别可以创建手机和手表的具体工厂类

    《BaseFactory》:

    BaseFactory.h:

    BaseFactory.m:

    两个具体工厂类《AppleFactory》和《GoogleFactory》:

    AppleFactory.h:

    AppleFactory.m:

    GoogleFactory.h:

    GoogleFactory.m:

    创建手机和手表的基本产品类《BasePhone》和《BaseWatch》:

    BasePhone.h:

    BasePhone.m:

    BaseWatch.h:

    BaseWatch.m:

    基本产品类下面可以创建具体的产品:

    《iPhone》,《Android》,《iWatch》,《Android》,具体产品类都差不多,每个产品类可以有自己的方法

    iPhone.h:

    iPhone.m:

    其他三个类依次类推...........

    最后创建一个工厂管理类《FactoryManager》,这个类的作用就是管理所有的基本工厂,用来获取创建产品的具体工厂类:

    FactoryManager.h:

    FactoryManager.m:

    使用:

    #import "ViewController.h"

    #import "FactoryManager.h"

    @interface ViewController ()

    @end

    @implementation ViewController

    - (void)viewDidLoad {   

    [super viewDidLoad];      

    //获取工厂 

      BaseFactory *factory = [FactoryManager factoryWithBrand:kGoogle];       

    //创建产品 

    BasePhone *phone = [factory createPhone];   

    BaseWatch *watch = [factory createWatch];   

    NSLog(@"%@ %@", phone, watch);

    }

    相关文章

      网友评论

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

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