设计模式

作者: 叔简 | 来源:发表于2021-06-19 10:33 被阅读0次

    设计模式的6大原则

    1. 单一职责原则:一个类只承担一个单一的职责
    2. 开闭原则:对软件实体的改动,最好用扩展而非修改的方式。
    3. 里氏替换原则:子类可以扩展父类的方法,但不应该复写父类的方法。
    4. 接口隔离原则:对象不应被强迫依赖它不使用的方法。
    5. 依赖倒置原则:抽象不应该依赖于具体实现,具体实现可以依赖于抽象,例如:增删改查的操作依赖于抽象接口的实现
    6. 迪米特法则:一个对象应该对其他对象保持最少的了解,实现低耦合、高内聚。

    设计模式

    1. 责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
      任务的指向,我们可以定义,c-b-a-nil,更改优先级,我们只需更改任务的nextresponder指向即可

    2. 桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
      在同一个列表上,随着时间的发展我们对应上不同的网络数据,网络数据ABC,关于不同网络数据之间的对应,我们的设计思路?
      通过一个桥接文件,我们将类A的三个子类文件对应上类B的三个子类文件,响应的处理在桥接文件中进行,其配置模式可以有9中,3x3的排列模式

    3. 适配器模式:将一个类的接口转换成另外一个客户希望的接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
      一个存在很久远的类文件(2,3年之前就存在编写的),当我们在进行这个类的编写或扩编时,我们如何规避风险?


      20210619-101912.png
    4. 单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。该类需要跟踪单一的实例,并确保没有其它实例被创建。单例类适合于需要通过单个对象访问全局资源的场合。
      写单例需要注意的点
      4.1. 写单例,首次创建需要使用super来创建(因为已经重写了allocWithZone方法,所以这里要调用父类的分配空间的方法)
      4.2. 外界进行alloc操作,我们需要重写allocWithZone方法
      4.3. 外界进行copy操作,我们需要重写copyWithZone方法
      4.4. 单例的正确创建方法

      • (instancetype)sharedInstance {
        static URLManager * ins = nil;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
        ins = [[super allocWithZone:nil] init];
        });
        return ins;
        }

      +(id)allocWithZone:(NSZone *)zone{
      return [self sharedInstance];
      }
      -(id)copyWithZone:(NSZone *)zone{
      return [[self class] sharedInstance];
      }
      -(id)mutableCopyWithZone:(NSZone *)zone{
      return [[self class] sharedInstance];
      }
      参考链接:https://www.jianshu.com/p/933b49a3bdf2

    5. 命令模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。请求对象将一或多个动作绑定在特定的接收者上。命令模式将发出请求的对象和接收及执行请求的对象区分开来。

    • 调用对象
      NSInvocation类的实例用于封装Objective-C消息。一个调用对象中含有一个目标对象、一个方法选择器、以及方法参数。您可以动态地改变调用对象中消息的目标及其参数,一旦消息被执行,您就可以从该对象得到返回值。通过一个调用对象可以多次调用目标或参数不同的消息。
      创建NSInvocation对象需要使用NSMethodSignature对象,该对象负责封装与方法参数和返回值有关系的信息。NSMethodSignature对象的创建又需要用到一个方法选择器。NSInvocation的实现还用到Objective-C运行环境的一些函数。
      NSInvocation对象是分布式、撤消管理、消息传递、和定时器对象编程接口的一部分。在需要去除消息发送对象和接收对象之间的耦合关系的类似场合下,您也可以使用。
    • 目标-动作
      目标-动作机制使控件对象—也就是象按键或文本输入框这样的对象—可以将消息发送给另一个可以对消息进行解释并将它处理为具体应用程序指令的对象。接收对象,或者说是目标,通常是一个定制的控制器对象。消息—也被称为动作消息—由一个选择器来确定,选择器是一个方法的唯一运行时标识。典型情况下,控件拥有的单元对象会对目标和动作进行封装,以便在用户点击或激活控件时发送消息(菜单项也封装了目标和动作,以便在用户选择时发送动作消息)。目标-动作机制之所以能够基于选择器(而不是方法签名),是因为Cocoa规定动作方法的签名和选择器名称总是一样的。
      当您用Interface Builder构建程序的用户界面时,可以对控件的动作和目标进行设置。您因此可以让控件具有定制的行为,而又不必为控件本身书写任何的代码。动作选择器和目标连接被归档在nib文件中,并在nib文件被解档时复活。您也可以通过向控件或它的单元对象发送setTarget:和setAction:消息来动态地改变目标和动作。
      目标-动作机制经常用于通知定制控制器对象将数据从用户界面传递给模型对象,或者将模型对象的数据显示出来。Cocoa绑定技术则可以避免这种用法,有关这种技术的更多信息请参见Cocoa绑定编程主题文档。

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

    责任链模式,使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。体现出单一职责原则,具体的类去干具体的事儿

    相关文章

      网友评论

        本文标题:设计模式

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