觀察者模式(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...