美文网首页
浅谈设计模式

浅谈设计模式

作者: 旅途的喵 | 来源:发表于2019-06-19 19:08 被阅读0次

单例

什么情况下会需要单例呢?比如系统中只能共享而不能复制的资源。例如,GPS,CoreLocation框架中的类

单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

何时使用单例

1.类只能有一个实例,并且必须有一个为人熟知的访问点对其访问,比如工厂方法。
2.唯一的实例只能通过子类化进行扩展,而且扩展的对象不会破坏客户端的代码。

Coco Touch框架中使用单例模式

UIApplication类
NSFileManager

抽象工厂模式

同一样披萨,配料的特点却因风味而略有不同。
抽象工厂提供一个固定的接口,用于创建一系列有关联或者相依存的对象而不指定具体的类或者创建的细节。客户端与从工厂得到的具体对象之间没有耦合。

抽象工厂:提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们的具体类

Coco Touch框架中使用抽象工厂

NsNumber
创建NSNumber实例的方式完全符合抽象工厂模式。

- (NSNumber *)initWithFloat:(float)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithDouble:(double)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithBool:(BOOL)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithInteger:(NSInteger)value

工厂方法模式

工厂方法也成为虚拟构造器。它适用于这种情况:一个类无法预期需要生成哪个类的对象,而让其子类来指定所生成的对象。
简单来说:你让工厂给你生产商品。你给它们发送一些“生产产品”的消息。工厂按照“生产产品”的协议启动生产线。过程结束后,每个厂家都返回所生产的特定类型的产品。我们把“生产”这个成为工厂方法。
工厂方法模式:定义创建对象的接口,让子类决定实例化哪一个类,工厂方法使得一个类的实例化延迟到其子类。

何时使用工厂方法模式

1.编译时无法准确预期要创建对象的类
2.类想让其子类决定在运行时创建什么
3.类有若干辅助类为其子类,而你想讲返回哪个子类的这一信息局部化

Coco Touch框架中使用工厂方法

如何创建NSNumber的具体子类型的实例对象的所有细节都由NSNumber的方法负责


抽象工厂与工厂方法.png

观察者模式

观察者模式也叫做发布-订阅模式。它很像杂志的订阅。订从杂志发行商订阅的时候,读者把名字和地址发送给发行商,这样新的一期就能送到读者手上。这正是观察者模式的工作方式。观察者通过通知器(发行商)把自己注册到(订阅)特定的通知(杂志)。当有通知的时候,观察者只从通知器得到他订阅的通知。

观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。

何时使用观察者模式

1.有两种抽象类型相互依赖。将它们封装在各自的对象中就可以对它们单独进行改变和复用。
2.对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变
3.一个对象必须通知其他对象,而它又不需要知道其他对象是什么。

举例

KVO
NSNotification
NSNotificationCenter

适配器模式

用于连接两种不同种类的对象,使其毫无问题地协同工作。有时也被称为“包装器”

实现方式

1.通过继承来适配两个接口,这称为类适配器。
2.对象适配器。与类适配器不同,对象适配器不继承适配着而是组合了一个对它的引用。

适配器模式:将一个类的接口转换成客户希望的另一个接口。适配器使得原本由于接口不兼容而不能在一起工作的那些类可以一起工作。

何时使用适配器模式

1.已有类的接口和需求不匹配
2.想要一个可复用的类,该类能够同可能带有不兼容接口的其他类协作。
3.需要适配一个类的几个不同子类,可是让每一个子类去子类化一个类适配器又不现实,那么可以使用对象适配器(也叫委托)来适配其父类的接口。

代理模式(委托模式)

代理模式和委托者模式的联系
适配器模式主要是将类的接口变为客户端要求的另一种接口。这里的客户端它们是Cocoa Touch框架中的类。
实现协议的类会是个适配器。
之所以委托模式主要是适配器模式,是因为委托机制也可以实现某些其他设计模式,比如说装饰模式。委托模式用于多个设计模式的混合体并与其相互关联的情况很常见

相关文章

  • 2019-03-31Contract 契约模式

    浅谈Laravel中的设计模式(四) Contract 契约模式 技术预备:熟悉Laravel的使用 契约模式(C...

  • 2020-07-02

    浅谈 浅谈模块设计宏内核 浅谈接口设计Flags 浅谈稳定性设计重试 浅谈人员业务结构设计矩阵式 浅谈接口设计 |...

  • 设计模式——个人浅谈

    设计模式——个人浅谈 1.什么是设计模式 开篇先借用名人Christopher Alexander说过的一句话“每...

  • 浅谈设计模式

    作为一个苦逼码农,请先回顾自己是否遇到过以下场景: 1.我要实现的这个特性中有一些被频繁使用的代码,并且在其它特性...

  • 浅谈设计模式

    一. MVC模式 MVC全名Model View Controller,是模型(model)-视图(view)-控...

  • 浅谈设计模式

    #面向对象 三大特性 封装 继承 多态[高内聚低耦合 也叫强内聚松耦合] 每一种模式都有各自的场景 ##工厂模式 ...

  • 浅谈设计模式

    单例 什么情况下会需要单例呢?比如系统中只能共享而不能复制的资源。例如,GPS,CoreLocation框架中的类...

  • 浅谈设计模式

    那天听到某大佬说面试被问到设计模式相关的问题,故特意重新将设计模式过了一遍,顺便稍微记录一下,以便以后复习可参考。...

  • 浅谈设计模式

    设计模式分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、...

  • PHP 设计模式阅读清单

    社区文章推荐 S.O.L.I.D 面向对象设计和编程(OOD&OOP)笔记 浅谈 Laravel 设计模式 PHP...

网友评论

      本文标题:浅谈设计模式

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