设计模式是在特定场景下对特定问题的解决方案,这些解决方案是经过反复论证和测试总结出来的。

程序(包括其中的对象和类),如果在设计中使用了设计模式,将来就更易于复用与扩展,更易于变更。

四种常用的设计模式:单例模式,委托模式,观察者模式和MVC模式

1. 单例模式:用于解决“应用中只有一个实例”的一类问题

实现原理:单例模式一般会封装一个静态属性,并提供静态实例的创建方法

应用案例:

在Cocoa Touch框架中:UIApplication,UIAccelerometer,NSUserDefaults和NSNotificationCenter,另外NSFileManager和NSBundle类虽然属于Cocoa框架的内容,但也可以在Cocoa Touch框架中使用

Cocoa框架中的单例类有NSFileManager,NSBundle,NSWorkspace ,NSApplication等

1.1 UIApplication

单例提供了应用程序的集中控制点来保持应用的状态。UIApplication实例总是分配给应用程序委托对象(UIApplicationDelegate),通过应用程序委托对象来响应低内存、应用启动、后台运行和应用终止等事件。

UIApplication类有很多方法和属性,重点介绍几个:

+sharedApplication方法。创建和获取UIApplication实例的方法

idleTimerDisabled属性。设定和获取“空闲事件禁止”的状态。idleTimerDisabled属性的默认值是NO,即默认情况下系统会锁定屏幕。当idleTimerDisabled = YES时,则不会开启“空闲时间禁止”状态,系统不会锁定屏幕。

-openURL:方法。可以打开一些内置的iOS应用,其中包括打开浏览器,打开Google地图,拨打电话,发送短信和发送E-Mail等。

 

打开浏览器:

 

打开Google地图:

 

拨打电话:

发送短信:

发送E-mail:

1.2 UIAccelerometer 它可以访问重力加速计硬件设备,实时获得设备在X轴,Y轴和Z轴方向上的重力加速度

+sharedAccelerometer方法是创建和获取UIAccelerometer实例的共享方法

其委托对象为UIAccelerometerDelegate

1.3 NSUserDefaults 可以方便的读取应用设置项目

+standardUserDefaults方法获取实例的静态方法

1.4 NSNotificationCenter 提供广播通知,它采用观察者模式的通知机制

+defaultCenter方法获取实例的静态方法

1.5 NSFileManager 提供访问文件系统的通用操作,可以定位、创建、复制文件和文件夹

+defaultManager方法获取实例的静态方法。除此之外,还有-init实例构造方法

1.6 NSBundle 提供动态加载(或卸载)可执行代码、资源定位文件以及资源本地化、访问文件系统等功能

+mainBundle方法获取实例的静态方法

 

2 委托模式

UIApplication不直接依赖AppDelegate类,而是UIApplicationDelegate协议,这在面向对象软件设计原则中叫做“面向接口的编程”,AppDelegate类实现协议UIApplicationDeleage,它是委托类。

委托是为了降低一个对象的复杂度和耦合度,是其能够更具通用性而将其中一些俄处理置于委托对象中的编码方式。通用类因为通用性(与具体应用的无关性)而变为框架类,框架类保持委托对象的指针,并在特定的时刻向委托对象发送消息,消息可能只是通知委托对象做一些事情,也可能是对委托对象进行控制。

应用: