OC中的單例模式和委託模式

2021-07-16 21:35:34 字數 2974 閱讀 1747

單例模式

**什麼時候使用單例模式:**

在乙個工程中,一些類只需要乙個例項變數,我們就可以將這些類設計成單例模式

**單例模式的作用?**

當乙個'類a'被設計成單例模式時,有'類a'構造出的例項物件之於其他類來講為全域性例項物件.即在每乙個類中由'a'構造出的例項物件,都未相同的物件.

**在oc中如何將乙個類設計成單例模式**

1.在要被設計成單例的類的.h檔案中宣告乙個構造單例方法

2.實現該方法

建立個student 類

在student.h 檔案中給個方法:

#import 

@inte***ce

student : nsobject

+(student *)shareinstance;

end

在student.m 檔案

#import

"student.h"

//宣告乙個靜態的例項物件,只會在第一次執行

static student *st = nil;

@implementation student

//實現該方法

+(student *)shareinstance

return st;

}//為了防止alloc 或new 建立新的例項變數

+(id)allocwithzone:(struct _nszone *)zone

return st;

}}//為了防止copy產生新的物件,需要遵循nscopying

-(id)copywithzone:(nszone *)zone

@end

回到控制器

student *student1 =[student shareinstance];

student *student2=[[student alloc]init];

student *student3=[student new];

student *student4 =[student3 copy];

nslog(@"

%p,%p,%p,%p

",student1,student2,student3,student4);

這就是單例模式..

~~~創個新的工程.

委託模式:

兩個物件間不能夠直接聯絡,需要通過乙個第三方物件,幫助它們聯絡,這一種模式,我們稱之為』委託模式』.

例如:』房東』 –』委託』—>』中介』–』賣方』–>』消費者』

建立2個類 房東類(landlord)和中介類(housesaier).和建立乙個中介的委託.

在委託中給兩個方法;

#import 

@protocol

landlordprotocol

-(void)mustsalehhouse;//賣房的方法

-(void)paymoney; //給錢的方法

@end

在housesaier.h檔案.匯入需要的標頭檔案和委託

#import 

#import "landlordprotocol.h"

#import "landlord.h"

@inte***ce

housesaier : nsobject

@property(nonatomic,strong)landlord *landlord;

@end

在housesaier.m檔案實現

#import "housesaier.h"

@implementation

housesaier

-(void)mustsalehhouse

-(void)paymoney

@end

回到landlord.h檔案中

#import 

#import "landlordprotocol.h"

@inte***ce

landlord : nsobject

//這裡使用assign 或者 weak 是為了防止迴圈引用

@property(nonatomic,assign)id

delegate;

-(void)registerhouse;

//表示房東收到錢了

-(void)receivemoney;

@end

landlord.m檔案

#import "landlord.h"

@implementation

landlord

-(void)registerhouse

}-(void)receivemoney

@end

所有的方法都寫完了就去控制器實現吧~~

#import

"viewcontroller.h"

#import

"landlord.h"

#import

"housesaier.h"

@inte***ce viewcontroller ()

@end

@implementation viewcontroller

- (void)viewdidload {

[super viewdidload];

landlord *landlord =[[landlord alloc]init];

housesaier *housesaier =[housesaier new];

landlord.delegate = housesaier;

housesaier.landlord =landlord;

[landlord registerhouse];

OC中的單例模式和委託模式

單例模式是設計模式的一種,主要的作用是用於設計約束或者為了控制對有限資源的訪問 首先新建乙個類,在類中新增單例 類名 方法名 通常share,defluat等開頭 在.m檔案中建立全域性靜態例項 static 類名 st nil 賦值nil 類名 方法名 return st id allocwith...

oc單例模式

1 單例模式概念 1 什麼是單例模式 singleton 單例模式的意圖是是的類的物件成為系統中唯一的例項,提供乙個訪問點,供客戶類 共享資源。2 什麼情況下使用單例?1 類只能有乙個例項,而且必須從乙個為人熟知的訪問點對其進行訪問,比如工廠方法。2 這個唯一的例項只能通過子類化進行擴充套件,而且擴...

OC 單例模式

設計模式 用來解決某一特定問題 單例模式 什麼時候使用單例模式?在工程中,一些類只需要乙個例項變數,我們就可以將這些類設計成單例模式 單例模式的作用?當乙個類a被設計成單例模式時,由類a構造出的例項物件之於其他類來說為全域性例項物件,即在每乙個類中由類a構建的例項物件 都是同乙個物件 在oc中如何將...