設計モード:MVC、工場、代理、KVO
3384 ワード
工場の使用状況
メリットとデメリット
利点:単純な工場モデルの利点はクライアントが直接製品を消費することができ、具体的な製品の実現に関心を持つ必要がなく、クライアントが直接製品オブジェクトを作成する責任を解消し、責任の分割を実現した.欠点:工場クラスはいくつかのすべての製品の創建ロジックを持っていて、いったん正常に仕事をすることができなくて、全体のシステムはすべて影響を受けて、その上製品クラスの多構造が複雑な時、すべての創建の仕事を1つの工場の中に入れて、事の後期のプログラムの拡張は比較的に困難です.
[cpp] view plain copy
@interface StockData : NSObject
{
NSString * stockName;
float price;
}
@end
@implementation StockData
@end
2.このモデルをControllerのプロパティとして定義し、インスタンス化し、そのプロパティをリスニングし、現在のViewに表示します.
[cpp] view plain copy
- (void)viewDidLoad
{
[super viewDidLoad];
stockForKVO = [[StockData alloc] init];
[stockForKVO setValue:@"searph" forKey:@"stockName"];
[stockForKVO setValue:@"10.0" forKey:@"price"];
[stockForKVO addObserver:self forKeyPath:@"price" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL];
myLabel = [[UILabel alloc]initWithFrame:CGRectMake(100, 100, 100, 30 )];
myLabel.textColor = [UIColor redColor];
myLabel.text = [stockForKVO valueForKey:@"price"];
[self.view addSubview:myLabel];
UIButton * b = [UIButton buttonWithType:UIButtonTypeRoundedRect];
b.frame = CGRectMake(0, 0, 100, 30);
[b addTarget:self action:@selector(buttonAction) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:b];
}
3.buttonをクリックすると、buttonActionメソッドを呼び出し、オブジェクトのプロパティを変更します.
[cpp] view plain copy
-(void) buttonAction
{
[stockForKVO setValue:@"20.0" forKey:@"price"];
}
[cpp] view plain copy
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if([keyPath isEqualToString:@"price"])
{
myLabel.text = [stockForKVO valueForKey:@"price"];
}
}
5.観察の増加と観察の取り消しは対として現れるので、最後に観察者を除去する必要がある
[cpp] view plain copy
- (void)dealloc
{
[super dealloc];
[stockForKVO removeObserver:self forKeyPath:@"price"];
[stockForKVO release];
}
四、小結KVOという符号化方式は簡単に使用でき、datamodelと修正した後、UIVIewの変化を引き起こす場合に適している.この場合、上記の例のように、属性の値を変更すると、傍受対象はすぐに通知される.