工厂模式---看我的足以


#pragma mark 创建Person基类 这是.h文件

@interface Person : NSObject

/**
 记录子类名字
 */
@property (nonatomic,strong)NSString *name;

/**
 初始化基类,根据条件初始化出相应的子类
 
 @param condition 条件(这里 1 为Man, 2 为 Woman)
 @return 获取具体的子类
 */
- (instancetype)initPersonSubclassWithCondition:(NSInteger)condition;

/**
 子类实现对应的方法
 
 @return 要执行的操作
 */
- (NSString *)likeSomeOne;

@end

#pragma mark Person基类 这是.m文件

#import "Person.h"
#import "Man.h"
#import "Woman.h"

@implementation Person

- (instancetype)initPersonSubclassWithCondition:(NSInteger)condition
{
    if (condition == 1) {
        Man *man = [[Man alloc]init];
        man.name = @"我是男人";
        return man;
    }
    if (condition == 2) {
        Woman *woman = [[Woman alloc]init];
        woman.name = @"我是女人";
        return woman;
    }
    return nil;
}
- (NSString *)likeSomeOne
{
    return nil;
}


@end
#pragma mark 创建Man子类继承Person

#import "Person.h"

@interface Man : Person

@end

#import "Man.h"

@implementation Man
// 重写父类方法
- (NSString *)likeSomeOne
{
    return @"我是男人,我喜欢女人";
}

@end


#pragma mark 创建Woman子类继承Person

#import "Person.h"

@interface Woman : Person

@end

#import "Woman.h"

@implementation Woman
// 重写父类方法
- (NSString *)likeSomeOne
{
    return @"我是女人,我喜欢男人";
}
@end
#pragma mark 创建Animal基类,根据条件初始化子类

#import <Foundation/Foundation.h>

@interface Animal : NSObject

/**
 记录名字
 */
@property (nonatomic,strong)NSString *name;

/**
 初始化基类,根据条件初始化出相应的子类

 @param condition 条件(这里 1 为Dog, 2 为 Cat)
 @return 获取具体的子类
 */
- (instancetype)initAnimalSubclassWithCondition:(NSInteger)condition;

/**
 子类实现对应的方法
 
 @return 要执行的操作
 */
- (NSString *)likeEatFood;

@end



#import "Animal.h"
#import "Dog.h"
#import "Cat.h"

@implementation Animal

- (instancetype)initAnimalSubclassWithCondition:(NSInteger)condition
{
    if (condition == 1) {
        Dog *dog = [[Dog alloc]init];
        dog.name = @"我是?";
        return dog;
    }
    if (condition == 2) {
        Cat *cat = [[Cat alloc]init];
        cat.name = @"我是?";
        return cat;
    }
    return nil;
}
- (NSString *)likeEatFood
{
    return nil;
}
@end

#pragma mark 创建Dog子类继承Animal

#import "Animal.h"

@interface Dog : Animal

@end
#import "Dog.h"

@implementation Dog

- (NSString *)likeEatFood
{
    return @"我是?,我喜欢吃?";
}

@end


#pragma mark 创建Cat子类继承Animal


#import "Animal.h"

@interface Cat : Animal

@end
#import "Cat.h"

@implementation Cat

- (NSString *)likeEatFood
{
    return @"我是?,我喜欢吃?";
}
@end
#pragma mark 创建Factory工厂类

#import <Foundation/Foundation.h>
@class Person;
@class Animal;

@interface Factory : NSObject

/**
 工厂Person子类
 */
@property (nonatomic,strong)Person *person;
/**
 工厂Animal子类
 */
@property (nonatomic,strong)Animal *animal;

/**
 初始化工厂,根据condition 条件初始化 Person/Animal基类,根据subclassCondt初始化基类的子类

 @param condition 初始化基类条件(1为 Person, 2 为Animal)
 @param subclassCondt 初始化基类子类 (Person类:(1 为Man, 2,为Woman); Animal类:(1 为 Dog, 2 为 Cat))
 @return 获取具体的子类
 */
- (instancetype)initFactorySubclassWithCondition:(NSInteger)condition AndBaseSubclassCondition:(NSInteger)subclassCondt;

/**
 获取子类名称
 */
- (void)getFactorySubClass;

@end

#pragma mark 将初始化延迟到子类中

#import "Factory.h"
#import "Person.h"
#import "Animal.h"
@implementation Factory

- (instancetype)initFactorySubclassWithCondition:(NSInteger)condition AndBaseSubclassCondition:(NSInteger)subclassCondt
{
    if (condition == 1) {
        Person *person = [[Person alloc]initPersonSubclassWithCondition:subclassCondt];
        self.person = person;
    }
    if (condition == 2) {
        Animal *animal = [[Animal alloc]initAnimalSubclassWithCondition:subclassCondt];
        self.animal = animal;
    }
    return self;
}
- (void)getFactorySubClass
{
    if (self.person != nil) {
        NSLog(@"%@----%@",self.person.name,[self.person likeSomeOne]);
    }
    if (self.animal != nil) {
        NSLog(@"%@----%@",self.animal.name,[self.animal likeEatFood]);
    }
}

@end
#import "Factory.h"


#pragma mark 使用:根据条件创建子类

- (void)viewDidLoad {
    [super viewDidLoad];


    Factory *man = [[Factory alloc]initFactorySubclassWithCondition:1 AndBaseSubclassCondition:1];
    [man getFactorySubClass];
    // 打印结果 我是男人----我是男人,我喜欢女人
    
    Factory *woman = [[Factory alloc]initFactorySubclassWithCondition:1 AndBaseSubclassCondition:2];
    [woman getFactorySubClass];
    // 打印结果 我是男人----我是女人,我喜欢男人
    
    Factory *dog = [[Factory alloc]initFactorySubclassWithCondition:2 AndBaseSubclassCondition:1];
    [dog getFactorySubClass];
   // 打印结果 我是?----我是?,我喜欢吃?
    
    Factory *cat = [[Factory alloc]initFactorySubclassWithCondition:2 AndBaseSubclassCondition:2];
    [cat getFactorySubClass];
    // 打印结果 我是?----我是?,我喜欢吃?

}

 

转载于:https://my.oschina.net/iOScoderZhao/blog/1528798

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值