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个不同的地方所调用的方法必须一样

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

  • 相关阅读:
    五。java运算符
    二。java的第一个程序
    四。java常量的学习以及数据类型转换
    修改Launcher源码之快速启动
    Eclipse导入Android项目的方法
    js日期时间控件脚本
    Android中的soundpool小结
    Android GPS (当前位置 & GPS信息更新)
    android利用WebView实现浏览器的封装
    Android选项卡置底的方法
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5254846.html
Copyright © 2011-2022 走看看