標籤:ret ios開發 調用 alt ace pop init article str
單例模式的意思就是僅僅有一個執行個體。
單例模式確保某一個類僅僅有一個執行個體,並且自行執行個體化並向整個系統提供這個執行個體。這個類稱為單例類。
1.單例模式的要點:
顯然單例模式的要點有三個;一是某個類僅僅能有一個執行個體;二是它必須自行建立這個執行個體;三是它必須自行向整個系統提供這個執行個體。
2.單例模式的長處:
1.執行個體控制:Singleton 會阻止其它對象執行個體化其自己的 Singleton 對象的副本,從而確保全部對象都訪問唯一執行個體。
2.靈活性:由於類控制了執行個體化過程,所以類能夠更加靈活改動執行個體化過程
我們來舉一個範例吧
比方說。我們須要有一個銀行,能夠在銀行中存錢和取錢。銀行的總錢數會隨著存錢取錢而變化
我們來建立一個類 銀行類
//// Bank.h// 08-Bank//// Created by cuixuerui on 15/12/29.// Copyright (c) 2015年 cuixuerui. All rights reserved.//#import <Foundation/Foundation.h>@interface Bank : NSObject@property int money;-(instancetype)initWithMoney:(int)money;+(Bank *)defaualtBank;@end
實現演算法 Bank.m
//// Bank.m// 08-Bank//// Created by cuixuerui on 15/12/29.// Copyright (c) 2015年 cuixuerui. All rights reserved.//#import "Bank.h"@implementation Bank-(instancetype)initWithMoney:(int)money { if (self =[super init]) { _money=money; } return self;}+(Bank *)defaualtBank { static Bank *bank;//全域變數 if (!bank) {//這句確保僅僅有一個執行個體 bank = [[Bank alloc]initWithMoney:1000];//自行建立執行個體 } return bank; }@end
事實上最重要的就是
+(Bank *)defaualtBank;
這是單例模式的關鍵所在
以下我們就來建立一個Person類
// PersonOne.h// 08-Bank//// Created by cuixuerui on 15/12/29.// Copyright (c) 2015年 cuixuerui. All rights reserved.//#import <Foundation/Foundation.h>#import "Bank.h"@interface PersonOne : NSObject{ Bank * _bank;}-(void)withDrawMoney:(int)money;-(void)saveMoney:(int)money;//-(instancetype)init;@end
實現person類
//// PersonOne.m// 08-Bank//// Created by cuixuerui on 15/12/29.// Copyright (c) 2015年 cuixuerui. All rights reserved.//#import "PersonOne.h"#import "Bank.h"@implementation PersonOne-(instancetype)init{ if (self = [super init]) { _bank = [Bank defaualtBank]; } return self;}-(void)saveMoney:(int)money { //一定要用建立單例對象的方法去建立 [_bank setMoney:[_bank money]+money]; NSLog(@"銀行裡還有%d",[_bank money]); }-(void)withDrawMoney:(int)money { [_bank setMoney:[_bank money]-money]; NSLog(@"銀行裡還有%d",[_bank money]); }@end
最後在main方法中調用
//// main.m// 08-Bank//// Created by cuixuerui on 15/12/29.// Copyright (c) 2015年 cuixuerui. All rights reserved.//#import <Foundation/Foundation.h>#import "PersonOne.h"int main(int argc, const char * argv[]) { PersonOne *p1 = [[PersonOne alloc] init]; [p1 saveMoney:500]; return 0;}
IOS開發基礎Object-C(12)—單例模式