设计模式
是某个具体编程问题的通用化,可以复用的解决方案
•常见的设计模式有:单例模式、委托(代理)模式、观察者模式、职责链模式等等
单例模式使用场景
•经常用于设计约束或者为了控制对有限资源的访问
•此种问题的解决方案称为单例,是一个确保不会创建多于一个类的实例
•单例模式在第一次调用该类时创建一个单一的全局实例,以后再创建实例时都是得到的第一次创建的那个全局实例
eg:
#import “Monitor.h"
@implementation Monitor
static Monitor *instance; // 静态全局变量 +( id )getInstance{ @synchronized ( self ){ // 同步关键字,防止多线程并发访问 if (! instance ) { instance = [[ Monitor alloc ] init ]; } } return instance ; } // 防止对象通过 alloc 创建对象 +( id )allocWithZone:( NSZone *)zone{ @synchronized ( self ){ // 同步关键字,防止多线程并发访问 if (! instance ) { instance = [ Monitor allocWithZone :zone]; } } return instance ; } // 防止调用 copy 方法创建新对象 -( id )copy{ return self ; } // 防止通过 release , retain , autorelease 释放对象 -( id )retain{ return self ; } -( oneway void )release{ } -( NSUInteger )retainCount{ return NSUIntegerMax ; //2^32 -1 } -( id )autorelease{ return self ; } @end
委托是一种简单而强大的模式。在此模式中,程序中的一个对象代表另外一个对象执行某个动作 , 或者与之相互协作共同完成某个任务。
Cocoa Touch 广泛使用委托( delegate ),它是负责为其他对象处理特定任务的类。通过委托,我们能够在某些预定义时间内为发布委托的类做一些工作。
所谓代理,就是指一方授予他方代理权,他方依代理权与第三方进行法律行为,其行为后果由一方承担的一种民事法律制度。委托是一方将一定的事务委诸于另一方实施的法律制度。
委托和代理的区别在于:第一,委托规范的是委托人和受托人双方之间的关系;而代理规范的是本人、代理人和第三人的关系。第二,代理关系中代理人代理的对象是进行意思表示和接受意思表示的行为;而委托中受托人代为实施的行为可以是法律行为,也可以是事实行为。第三,代理包括对内和对外两种关系,对内是代理人和被代理人之间的关系,而对外是代理人和第三人之间的关系;而委托只是委托人和受托人之间的关系。
•常见的设计模式有:单例模式、委托(代理)模式、观察者模式、职责链模式等等
单例模式使用场景
•经常用于设计约束或者为了控制对有限资源的访问
•此种问题的解决方案称为单例,是一个确保不会创建多于一个类的实例
•单例模式在第一次调用该类时创建一个单一的全局实例,以后再创建实例时都是得到的第一次创建的那个全局实例
eg:
#import “Monitor.h"
@implementation Monitor
static Monitor *instance; // 静态全局变量 +( id )getInstance{ @synchronized ( self ){ // 同步关键字,防止多线程并发访问 if (! instance ) { instance = [[ Monitor alloc ] init ]; } } return instance ; } // 防止对象通过 alloc 创建对象 +( id )allocWithZone:( NSZone *)zone{ @synchronized ( self ){ // 同步关键字,防止多线程并发访问 if (! instance ) { instance = [ Monitor allocWithZone :zone]; } } return instance ; } // 防止调用 copy 方法创建新对象 -( id )copy{ return self ; } // 防止通过 release , retain , autorelease 释放对象 -( id )retain{ return self ; } -( oneway void )release{ } -( NSUInteger )retainCount{ return NSUIntegerMax ; //2^32 -1 } -( id )autorelease{ return self ; } @end
委托是一种简单而强大的模式。在此模式中,程序中的一个对象代表另外一个对象执行某个动作 , 或者与之相互协作共同完成某个任务。
Cocoa Touch 广泛使用委托( delegate ),它是负责为其他对象处理特定任务的类。通过委托,我们能够在某些预定义时间内为发布委托的类做一些工作。
所谓代理,就是指一方授予他方代理权,他方依代理权与第三方进行法律行为,其行为后果由一方承担的一种民事法律制度。委托是一方将一定的事务委诸于另一方实施的法律制度。
委托和代理的区别在于:第一,委托规范的是委托人和受托人双方之间的关系;而代理规范的是本人、代理人和第三人的关系。第二,代理关系中代理人代理的对象是进行意思表示和接受意思表示的行为;而委托中受托人代为实施的行为可以是法律行为,也可以是事实行为。第三,代理包括对内和对外两种关系,对内是代理人和被代理人之间的关系,而对外是代理人和第三人之间的关系;而委托只是委托人和受托人之间的关系。