iOS设计模式-工厂模式

2018-01-02  本文已影响0人  小_黑_屋
关于工厂模式,有很多新加入的朋友不太理解这种模式的好处,觉得是增加了代码数量。这里简单讲解一下我个人看法

这里上一个简单的动物猫狗案例

OC版本
#import <Foundation/Foundation.h>

@interface Animal : NSObject
@property(nonatomic, copy)NSString * name;
@property(nonatomic, assign)NSInteger age;

- (void)printSelf;

- (void)haveFun;
@end
#import "Animal.h"

@implementation Animal
- (void)haveFun {
    NSLog(@"%ld岁的%@在玩耍",self.age,self.name);
}

- (void)printSelf {
    NSLog(@"%ld岁的动物%@",self.age,self.name);
}

-(void)setAge:(NSInteger)age {
    if (age >= 0) {
        _age = age;
    } else {
        _age = 0;
    }
}

- (void)setName:(NSString *)name {
    if (name == nil) {
        _name = @"";
    } else {
        _name = name;
    }
}
@end
#import "Animal.h"

@interface Cat : Animal
+ (instancetype)createCatWithName:(NSString *)name Age:(NSInteger)age;
@end
#import "Cat.h"

@implementation Cat
+ (instancetype)createCatWithName:(NSString *)name Age:(NSInteger)age {
    Cat * newCat = [[Cat alloc]init];
    newCat.name = name;
    newCat.age = age;
    return newCat;
}

- (void)printSelf {
    NSLog(@"%ld岁的小猫%@",self.age, self.name);
}
@end
#import "Animal.h"

@interface Dog : Animal
+ (instancetype)createDogWithName:(NSString *)name Age:(NSInteger)age;
@end
#import "Dog.h"

@implementation Dog
+ (instancetype)createDogWithName:(NSString *)name Age:(NSInteger)age {
    Dog * newDog = [[Dog alloc]init];
    newDog.name = name;
    newDog.age = age;
    return newDog;
}


- (void)printSelf {
    NSLog(@"%ld岁的小狗%@",self.age, self.name);
}
@end
Animal * dog = [Dog createDogWithName:@"小灰" Age:2];
Animal * cat = [Cat createCatWithName:@"小花" Age:1];

[dog printSelf];
[dog haveFun];
    
[cat printSelf];
[cat haveFun];

swift版本
import UIKit

class Animal: NSObject {
    var name : String = ""
    var age : Int = 0 {
        didSet {
            if age < 0 {
                age = 0
            }
        }
    }
    
    func haveFun() {
        print("\(self.age)岁的\(self.name)在玩耍")
    }
    
    func printSelf() {
        print("\(age)的动物\(name)")
    }

}
import UIKit

class Cat: Animal {
    static func createCat(name aName : String, age aAge : Int) -> Cat {
        let newCat = Cat.init()
        newCat.name = aName
        newCat.age = aAge
        return newCat
    }
    
    override func printSelf() {
        print("\(self.age)岁的小猫\(self.name)")
    }
    
}
import UIKit

class Dog: Animal {
    static func createDog(name aName : String, age aAge : Int) -> Dog {
        let newDog = Dog.init()
        newDog.name = aName
        newDog.age = aAge
        return newDog
    }
    
    override func printSelf() {
        print("\(self.age)岁的小狗\(self.name)")
    }
}
let dog = Dog.createDog(name: "小灰", age: 2)
let cat = Cat.createCat(name: "小花", age: 1)
        
dog.haveFun()
dog.printSelf()
        
cat.haveFun()
cat.printSelf()
上一篇 下一篇

猜你喜欢

热点阅读