iOS设计模式简介

开闭原则:

一个模块的修改,对拓展开放而对修改关闭。

举个例子:有一个类在项目中很多地方被使用了,但是由于需求,想对这个类进行拓展,这里可以使用继承拓展出子类,可以对子类进行修改,尽量不要修改原来的类。

里氏代换原则:

子类父类可以替换,子类可以使用父类所有的方法,父类可以使用子类所有的方法。

举个例子:有多个子类继承了父类,并且实现了父类的抽象方法(虽然OC中没有抽象方法或者是虚函数这个概念,但是父类方法不实现,就模拟了没有具体实现的抽象方法或者叫虚函数),在用父类创建实例的时候,声明可以用父类,创建实例可以用父类,也可以用其子类,这样,所调用的方法就会自动切换到相应的实例的方法。这个就是里氏代换原则,和面向对象的多态类似。

依赖倒转原则:

抽象不依赖于细节,细节依赖于抽象。(这个指的是接口)

举个例子:一个类的接口方法或者是继承得来的抽象方法,需要通过[self …]调用所在类的自己的具体的方法,这个方法是私有的方法,并不会对外开放的。在OC中,只要这个具体的方法没有写在.h文件中,就不会被外部使用,也可以降低看代码的干扰。如果把这个具体的方法写在.h文件中,也就是暴露出来了,这样会破坏封装性,而且会直接影响里氏代换原则的操作。而且如果某一个类继承这个类,又会造成额外的差异。我们尽量要做到,抽象的方法(比如这里是接口的方法)用具体实现的方法来实现,但是这个具体实现的方法不应该暴露出来,这就叫做抽象不依赖细节,细节依赖于抽象。

接口隔离原则:

一些接口尽量只做必要的事情,而不要做太多和这个接口无关的事情。严格遵守会让源码复用性很高。

举个例子:不要让接口做一些超出它范围的没用的事情。

合成/聚合复用:

如果从一个类扩展出另外一个方法,尽量不要使用继承,而是要使用组合。

举个例子:如果原来的一个类已经满足不了需求了,需要添加方法,一般来说,可以用继承,如果不到万不得已,最好不用这么做,其实可以将这个类当作一个组件在新建的一个类中来使用,然后这个新建的类,可以多建立几个满足需求的方法。在这里,新的类就相当于一个容器的作用。

时间: 2024-11-02 08:29:50

iOS设计模式简介的相关文章

《Swift iOS应用开发实战》——3.1MVC设计模式简介

3.1MVC设计模式简介 要想成为一名优秀的iOS程序开发人员,至少要具备一种面向对象程序设计语言的开发经验,比如Java.C++或C#,并且C语言也是我们必须熟练掌握的,在此基础上学习Swift语言就会游刃有余.除此以外,我们还要对设计模式有一定的了解.在iOS中最重要的,也是使用最多的一种设计模式就是:模型-视图-控制器(Model-View-Controller,MVC)设计模式. 在开发面向对象应用程序之前(甚至是面向对象程序开发成为主流后的一段时间),程序员们在编写程序代码时还总是愿意

iOS设计模式 - 中介者

iOS设计模式 - 中介者   原理图   说明 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 注:中介者对象本身没有复用价值,只是将逻辑操作封装在一个类里面而已   源码 https://github.com/YouXianMing/iOS-Design-Patterns // // TextFieldMediator.h // MediatorPattern // // Created by YouXianMi

iOS设计模式 - 适配器

iOS设计模式 - 适配器   效果   说明 1. 为了让客户端尽可能的通用,我们使用适配器模式来隔离客户端与外部参数的联系,只让客户端与适配器通信. 2. 本教程实现了适配器模式的类适配器与对象适配器两种模式,各有优缺点. 3. 如果对面向对象基本原理以及设计模式基本原理不熟悉,本教程会变得难以理解.   源码 https://github.com/YouXianMing/iOS-Design-Patterns // // BusinessCardView.h // Adapter // /

iOS设计模式 - 桥接

iOS设计模式 - 桥接   示意图   说明 1. 桥接模式为把抽象层次结构从实现中分离出来,使其可以独立变更,抽象层定义了供客户端使用的上层抽象接口,实现层次结构定义了供抽象层次使用的底层接口,实现类的引用被封装于抽象层的实例中,桥接就形成了. 2. 桥接模式可以解决具有功能类似但又不完全相同的某种功能架构,为了能让实现更加灵活.   源码 https://github.com/YouXianMing/iOS-Design-Patterns // // ConsoleController.h

iOS设计模式 - 策略

iOS设计模式 - 策略   效果   说明 1. 把解决相同问题的算法抽象成策略(相同问题指的是输入参数相同,但根据算法不同输出参数会有差异) 2. 策略被封装在对象之中(是对象内容的一部分),策略改变的是对象的内容.如果从外部扩展了对象的行为,就不叫策略模式,而是装饰模式. 3. 策略模式可以简化复杂的判断逻辑(if - else) 4. 如果对面向对象基本原理以及设计模式基本原理不熟悉,本教程会变得难以理解.   源码 https://github.com/YouXianMing/iOS-

iOS设计模式 - 代理

iOS设计模式 - 代理   原理图   说明 1. 代理模式大家都用过,但用抽象基类NSProxy实现代理估计鲜有人用 2. 本人用NSProxy实现了代理模式,对于理解消息转发机制有点帮助   源码 https://github.com/YouXianMing/iOS-Design-Patterns // // AbstractProxy.h // AppProxy // // Created by YouXianMing on 15/8/4. // Copyright (c) 2015年

iOS设计模式 - 备忘录

iOS设计模式 - 备忘录   原理图   说明 1. 在不破坏封装的情况下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态 2. 本人已经将创建状态与恢复状态的逻辑抽象成了协议,并配合备忘录中心一起使用   源码 https://github.com/YouXianMing/iOS-Design-Patterns // // MementoCenter.h // MementoPattern // // Created by YouXianMin

iOS设计模式 - 责任链

iOS设计模式 - 责任链   原理图   说明 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任.   源码 https://github.com/YouXianMing/iOS-Design-Patterns // // ChainOfResponsibilityProtocol.h // C

iOS设计模式 - 外观

iOS设计模式 - 外观   原理图     说明 1. 当客服端需要使用一个复杂的子系统(子系统之间关系错综复杂),但又不想和他们扯上关系时,我们需要单独的写出一个类来与子系统交互,隔离客户端与子系统之间的联系,客户端只与这个单独写出来的类交互 2. 外观模式实质为为系统中的一组接口提供一个统一的接口,外观定义了一个高层接口,让子系统易于使用   源码 https://github.com/YouXianMing/iOS-Design-Patterns // // ShapeMaker.h /