IOS常用設計模式 觀察者模式(IOS開發)

2021-07-07 07:52:47 字數 2250 閱讀 8525

觀察者模式(observer)也叫發布/訂閱模式(publish/subscribe)

- 問題:

在軟體設計中,經常需要對乙個物件的狀態改變,從而引起很多物件的狀態發生改變。這個特點很明顯,復用性強,而且物件之間匿名通訊。觀察者模式最為適合。

- 原理:

舉個例子:

包括四個角色:

1、抽象主題(subject)。是個協議,是乙個觀察者集合容器,定義了新增,移除和對所有觀察者傳送通知(分別對應attach/detach/notifyobserver三個方法)。

2、抽象觀察者(observer)。也是個協議,有乙個更新方法(update)但是只是對自身進行日誌處理。

3、具體觀察者(concreteobserver)。observer協議的具體實現。

4、具體主題(concretesubject)。subject協議的具體實現。

兩個協議不僅提高了系統的可復用性,還降低了藕合度。

// observer.h

@protocol observer

@required

-(void)update;

@end

// subject.h

@class observer

@protocol subject

@required

-(void)attach:(observer *) observer;

-(void)detach:(observer *) observer;

-(void)notifyobservers;

@end

// concreteobserver.h

#import "observer.h"

@inte***ce concreteobserver : nsobject

@end

// concreteobserver.m

#import "concreteobserver.h"

@implementation concreteobserver

-(void)update

@end

// concretesubject.h

#import "subject.h"

@class observer;

@inte***ce concretesubject : nsobject

@property (nonatomic, strong) nsmutablearray* observers;

+(concretesubject*)sharedconcretesubject;

@end

// concretesubject.m

#import "concretesubject.h"

@implementation concretesubject

@synthesize observers;

static concretesubject *sharedconcretesubject = nil;

+(concretesubject)sharedconcretesubject

); return sharedconcretesubject;

}- (void) attach:(observer*) observer

- (void) detach:(observer*) observer

- (void)notifyobservers

}@end

一、通知機制

整個流程可以這麼說:抽象主題(協議)負責宣告一些方法,然後交給具體主題去實現方法,然後對每乙個觀察者進行操作。

-應用:

通知機制(notification):

這個應該通過例項來講,但是這樣真的複雜的一比。所以我盡量講明白這個過程。

通知時典型的一對多物件的通訊。

這裡面有三個角色:

1、投送物件(協議):抽象主題

2、通知中心(nsnotificationcenter):具體主題

3、接收者:觀察者

流程:1、首先接受者們去註冊通知。(addobserver:selector:name:object:)

3、廣播中心對所有的接受者進行廣播。然後接受者通過(handleterminate:)方法去接受notification

4、接受者可以解除訊息通知(removeobserver:)

二、kvo機制:再物件屬性變化時通知給觀察者,而不是對所有觀察者都傳送通知

我還沒有遇到過!所以無法理解!下次再做修改!

iOS 觀察者設計模式

觀察者模式用於當某件事情發生時去執行某事 當某件事發生的時候,就會通知所有的觀察者 1.首先要新增觀察者 或者稱為監聽者 因為生產者需要維護這乙個所有觀察者的陣列,當某件事情發生時就迴圈這個資料,依次進行對每個觀察者進行通知 2.當某件時發生時就傳送通知 在ios中觀察者模式已經被封裝成了nsnot...

iOS設計模式 觀察者

ios設計模式 觀察者 原理圖 1.cocoa框架本身實現了觀察者模式 通知中心以及kvo 2.本人所寫的例子,實現了通知中心,其特殊的地方在於,不用移除訂閱了通知的物件原始碼 observerpattern created by youxianming on 15 7 29.import impo...

常用設計模式 觀察者模式

觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件在狀態上發生變化時,會通知所有觀察者物件,使它們能夠自動更新自己。被觀察者介面 片.public inte ce subject 被觀察者實現類 片.public inte ce anyservice publ...