zoukankan      html  css  js  c++  java
  • iOS 设计模式之工厂模式

    工厂模式我的理解是:他就是为了创建对象的

    创建对象的时候,我们一般是alloc一个对象,如果需要创建100个这样的对象,如果是在一个for循环中还好说,直接一句alloc就行了,但是事实并不那么如意,我们可能会在不同的地方去创建这个对象,那么我们可能需要写100句alloc 了,但是如果我们在创建对象的时候,需要在这些对象创建完之后,为它的一个属性添加一个固定的值,比方说都是某某学校的学生,那么可能有需要多些100行重复的代码了,那么,如果写一个-(void)createObj方法,把创建对象和学校属性写在这个方法里边,那么就是会省事很多,也就是说我们可以alloc 创建对象封装到一个方法里边,直接调用这个方法就可以了,这就是简单工厂方法

    代码结构如下

    Animal 类

    @interface Animal :NSObject

    @proterty(nonatomic,strong) NSString *name;

    -(void)laugh;

    @end

    Dog类

     

    @interface Dog:Animal

    @end

     

    Cat类

    @interface Cat:Animal

    @end

     

    创建对象的工厂类

    .h

    @interface AnimalFactory:NSObject

    +(Dog *)createDog;

    +(Cat *)createCat;

    @end

    .m

    @implementation AnimalFactory

    +(Dog *)createDog{

        Dog *dog=[[Dog alloc]init];

        dog.name=@“baby”;

        return dog;

    }

     

    +(Cat *) createCat{

        Cat *cat=[[Cat alloc]init];

        return cat;

    }

    Main.m文件

    Dog *dog=[AnimalFactory createDog];

    Cat *cat=[AnimalFactory createCat];

    这是简单工厂模式

    现在创建100个Dog对象,如果这100个对象写在程序中的不同地方,按上边的方法是需要把Dog *dog=[AnimalFactory createDog];这一句话写在程序中很多不同的地方,那么现在有一个需求,就是如果需要把这些创建的100个Dog对象全部变成Cat对象,那么按照刚才的那个做法,就需要在这100句代码中把createDog方法变成createCat方法了,这样做还是很复杂

    那么这个时候用工厂方法模式就能解决这个难题了

    工厂方法模式是为每一个要创建的对象所在的类都相应地创建一个工厂

    代码如下

    @interface AnimalFactory:NSObject

    -(Animal*)createAnimal;

    @end;

    Dog工厂类

    @interface DogFactory:AnimalFactory;

    @implementation DogFactory

    -(Animal *)createAnimal{

    retrurn [[Dog alloc]init];

    }

    @end

    Cat工厂类

    @interface CatFactory:AnimalFactory;

    @implementation Cat Factory

    -(Animal *)createAnimal

    retrurn [[Cat alloc]init];

    }

    @end

    Main.m

    AnimalFactory *dogFactory=[[DogFactory alloc]init];

     

    Animal *animal1=[dogFactory createAnimal];

    [animal1 laugh];

    Animal *animal2=[dogFactory createAnimal];

    [animal2 laugh];

    …….

    Animal *animal100=[dogFactory createAnimal];

    [animal100 laugh];

    这样话如果要把100个Dog改为Cat的话,只需要吧DogFactory改为CatFactory就可以了

     

    但是工厂方法也有它的限制:

    1.要创建的类必须拥有同一个父类

    2.要创建的类在100个不同的地方所调用的方法必须一样

    以上这些只是个人感悟,会有一些不足的地方,请大家帮忙改正,嘿嘿

    http://blog.csdn.net/xiazailushang/article/details/19040117
     
  • 相关阅读:
    零点起飞学Word与Excel高效办公实战与技巧
    C语言核心技术(原书第2版)
    完全精通Nuendo电脑音乐及音频制作:精细操作与实践指南
    1035.找出直系亲属(floyd)
    1033.继续XXX定律
    1034.寻找大富翁
    1032.ZOJ问题
    1029.魔咒词典
    1031.XXX定律
    1028.继续畅通工程
  • 原文地址:https://www.cnblogs.com/liuyingjie/p/5341007.html
Copyright © 2011-2022 走看看