美文网首页
工厂模式

工厂模式

作者: 春风依旧 | 来源:发表于2018-12-13 20:58 被阅读9次

    工厂模式是23种设计模式的一种,这个运用比较广泛,像友盟,shareSDK之类的都是采用的这种方式,很方便的为我们提供一种创建对象的方式。

    一、工厂模式概念:

            定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色情况下的情况下引进新的产品.

    二、简单工厂模式

             说一下我对它的理解:它是运用了类的继承,创建一个拥有某些共同属性的类的实例对象,每个类都可以为自己添加私有的方法;创建对象的方法放在一个工厂类里面,方便批量进行实例对象的创建。具体如下实现:

    • 对象类
    //Animal类
    @interface Animal :NSObject
    
    @proterty(nonatomic,strong) NSString *name;
    -(void)laugh;
    @end
    
    //Dog类
    @interface Dog:Animal
    
    @end
    
    //Cat类
    @interface Cat:Animal
    
    @end
    
    
    • 创建对象的工厂类
    @interface AnimalFactory:NSObject
    
    +(Dog *)createDog;
    
    +(Cat *)createCat;
    
    @end
    
    @implementation AnimalFactory
    
    + (Dog  * ) createDog {
        Dog * dog = [[Dog alloc] init];
        dog.name = @“baby”;
        return dog;
    }
    
    + (Cat  * ) createCat {
        Cat  * cat = [[Cat alloc] init];
        return cat;
    }
    
    
    • 在控制器的.m中写如下代码即可创建对象
    Dog *dog=[AnimalFactory createDog];
    Cat *cat=[AnimalFactory createCat];
    
    

    三、工厂方法模式

            现在有个需求:创建100个Dog对象,如果这100个对象卸载程序中的不同地方,则需要这样写

    Dog *dog=[AnimalFactory createDog];
    
    

    如果有一天,创建的对象不是100个Dog,而是Cat对象;那么需要把这个100个创建方法都要替换,这样做既费时又很累,聪明的程序员们就提出了工厂方法进行解决这个难题。

    • 创建对象的工厂类
    @interface AnimalFactory:NSObject
    
    -(Animal*)createAnimal;
    
    @end
    
    • Dog工厂类
    @interface DogFactory:AnimalFactory;
    
    @end 
    
    @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];
    
    

    四、抽象工厂模式

    相关文章

      网友评论

          本文标题:工厂模式

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