美文网首页
类族模式隐藏实现细节

类族模式隐藏实现细节

作者: 东了个尼 | 来源:发表于2019-06-25 15:15 被阅读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
    

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

    相关文章

      网友评论

          本文标题:类族模式隐藏实现细节

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