设计模式

作者: Jimmy_L_Wang | 来源:发表于2019-06-26 22:40 被阅读0次

六大设计原则

  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

命令模式

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

总结

  • 请手写单例实现

  • 你都知道哪些设计原则,请谈谈你的理解

  • 能否用一幅图简单的表示桥接模式的主题结构

  • UI事件传递机制是怎样实现的?你对其中运用到的设计模式是怎样理解的?

    设计模式角度是是责任链模式,一个类,它有一个成员变量,其类型是当前类的类型。

相关文章

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • 设计模式笔记汇总

    目录 设计原则 “依赖倒置”原则 未完待续... 设计模式 设计模式——策略模式 设计模式——装饰者模式 设计模式...

  • 设计模式

    《C#设计模式》 《C#设计模式》-设计模式概述 《C#设计模式》-面向对象设计原则 《C#设计模式》-单例模式 ...

  • 浅谈JS的一些设计模式

    @(书籍阅读)[JavaScript, 设计模式] 常见设计模式 设计模式简介 设计模式概念解读 设计模式的发展与...

  • 前端设计模式

    JS设计模式一:工厂模式jS设计模式二:单例模式JS设计模式三:模块模式JS设计模式四:代理模式JS设计模式五:职...

  • 设计模式之工厂模式

    设计模式之工厂模式 标签(空格分隔): 设计模式 工厂模式 设计模式的感念 设计模式的应用 工厂设计模式的产生 工...

  • JavaJavascript基础进阶(十七)JS中常用的设计模式

    单利设计模式、构造原型设计模式、发布订阅设计模式、promise设计模式 单利模式 构造原型设计模式 最贴近OOP...

  • 设计模式 - 目录

    设计模式01 - 单例模式 设计模式02 - 工厂模式 设计模式03 - 建造者模式 设计模式04 - 适配器模式...

  • 第1章 设计模式概述

    一、设计模式的概念 二、设计模式的历史 三、设计模式的要素 四、设计模式的分类 ■ 创建型设计模式 ■ 结构型设计...

  • iOS设计模式(3)适配器模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(4)抽象工...

网友评论

    本文标题:设计模式

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