iOS面试总结

设计模式

2019-06-26  本文已影响0人  Jimmy_L_Wang

六大设计原则

  1. 单一职责原则 - 一个类只负责一件事
  2. 依赖倒置原则 - 抽象不应该依赖于具体实现,具体实现可以依赖于抽象
  3. 开闭原则 - 对修改关闭,对扩展开放
  4. 里氏替换原则 - (父类可以被子类无缝替换,且原有功能不受任何影响)
  5. 接口隔离原则 (使用多个专门的协议、而不是一个庞大臃肿的协议,协议中的方法也要尽量少)
  6. 迪米特法则 - (一个对象应当对其他对象有尽可能少的了解,高内聚,低耦合)

责任链模式

什么是责任链模式?

某一个类,它有一个成员变量,其类型是这个类本身。

责任链.png
//BusinessObject.h
#import <Foundation/Foundation.h>

@class BusinessObject;
typedef void(^CompletionBlock)(BOOL handled);
typedef void(^ResultBlock)(BusinessObject *handler, BOOL handled);

@interface BusinessObject : NSObject

// 下一个响应者(响应链构成的关键)
@property (nonatomic, strong) BusinessObject *nextBusiness;
// 响应者的处理方法
- (void)handle:(ResultBlock)result;

// 各个业务在该方法当中做实际业务处理
- (void)handleBusiness:(CompletionBlock)completion;
@end
  
 //  BusinessObject.m

@implementation BusinessObject

// 责任链入口方法
- (void)handle:(ResultBlock)result
{
    CompletionBlock completion = ^(BOOL handled){
        // 当前业务处理掉了,上抛结果
        if (handled) {
            result(self, handled);
        }
        else{
            // 沿着责任链,指派给下一个业务处理
            if (self.nextBusiness) {
                [self.nextBusiness handle:result];
            }
            else{
                // 没有业务处理, 上抛
                result(nil, NO);
            }
        }
    };
    
    // 当前业务进行处理
    [self handleBusiness:completion];
}

- (void)handleBusiness:(CompletionBlock)completion
{
    /*
     业务逻辑处理
     如网络请求、本地照片查询等
     */
}

@end

桥接模式

bridge.png

适配器模式

一个现有类需要适应变化的问题

对象适配器.png
//  Target.h
@interface Target : NSObject
- (void)operation;
@end
  //  Target.m
@implementation Target
- (void)operation
{
    // 原有的具体业务逻辑
}
@end
  
//  CoolTarget.h

// 适配对象
@interface CoolTarget : NSObject
// 被适配对象
@property (nonatomic, strong) Target *target;
// 对原有方法包装
- (void)request;
@end
  
  //  CoolTarget.m
@implementation CoolTarget
- (void)request
{
    // 额外处理
    
    [self.target operation];
    
    // 额外处理
}
@end

单例模式

@implementation Mooc

+ (id)sharedInstance
{
    // 静态局部变量
    static Mooc *instance = nil;
    
    // 通过dispatch_once方式 确保instance在多线程环境下只被创建一次
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        // 创建实例
        instance = [[super allocWithZone:NULL] init];
    });
    return instance;
}

// 重写方法【必不可少】
+ (id)allocWithZone:(struct _NSZone *)zone{
    return [self sharedInstance];
}

// 重写方法【必不可少】
- (id)copyWithZone:(nullable NSZone *)zone{
    return self;
}

@end

命令模式

一种对行为进行参数化的设计模式,降低代码重合度;

总结

上一篇 下一篇

猜你喜欢

热点阅读