类族模式隐藏实现细节

2019-06-25  本文已影响0人  东了个尼

类族模式是一种很常用的模式,可以隐藏抽象基类背后的实现细节。objective的系统框架中普遍使用此模式。比如iOS的系统界面框架UIKIT中就有一个名叫UIButton的类。想创建按钮,需要调用下面这个类方法。+(UIButton *)buttonWithType:(UIButtonType);改方法所返回的对象,其类型取决于传入的按钮类型(buttonType),然而不管返回什么类型的对象,它们都继承自同一个基类:UIButton。这么做的意义在于:UIButton类的使用者无需关心创建出来的按钮具体属于哪个子类,只需要传入创建的按钮类型就可以了。

创建类族

现在来演示如何创建类族。假设有一个处理雇员的类,每个雇员都有名字,薪水这两个属性,管理者可以命令去做工作,但是每个雇员的工作内容各不相同,管理者带领雇员做工作的时,无需关心每个人如何工作,只要下达开工命令即可。
首先定义抽象基类:

#import <Foundation/Foundation.h>

#import <UIKit/UIKit.h>
typedef NS_ENUM (NSInteger,EOCEmployeeType){
    EOCEmployeeTypeDevelop,
    EOCEmployeeTypeDesigner,
    EOCEmployeeTypeFinance,
};

@interface EOCEmployee : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic,assign) NSInteger   salary;
+ (EOCEmployee *)employeeWithType:(EOCEmployeeType)type;
- (void)doWork;
@end

#import "EOCEmployee.h"
#import "EOCEmployeeDevelop.h"
#import "EOCEmployeeFinance.h"
#import "EOCEmployeeDesigner.h"
@implementation EOCEmployee
+ (EOCEmployee *)employeeWithType:(EOCEmployeeType)type{
    switch (type) {
        case EOCEmployeeTypeDevelop:
            return [[EOCEmployeeDevelop alloc] init];
            break;
        case EOCEmployeeTypeDesigner:
            return [[EOCEmployeeDesigner alloc] init];
            break;
        case EOCEmployeeTypeFinance:
            return [[EOCEmployeeFinance alloc] init];
            break;

        default:
            break;
    }
}
- (void)doWork{

}

每个实体子类都由基类继承而来如:

#import "EOCEmployee.h"

@interface EOCEmployeeDesigner : EOCEmployee

@end

#import "EOCEmployeeDesigner.h"
@implementation EOCEmployeeDesigner
- (void)doWork{

    NSLog(@"EOCEmployeeDesigner");
}
@end

这么做的好处是使用工厂方法隐藏了子类的实现细节,只需要传入枚举类型,就可以下达命令实现功能。

上一篇下一篇

猜你喜欢

热点阅读