設計モード:MVC、工場、代理、KVO

3384 ワード

  • MVCはControllerを代表し、ユーザーインタフェースとビジネスロジック層の通信制御を担当し、ユーザーインタフェースからの入力を解釈し、ユーザーの動作(ボタンをクリックするなど)を識別し、対応するModelの中の方法を呼び出す一方で、Modelからのイベントと返信の実行結果を処理し、適切なViewを呼び出してユーザーに表示し、Controllerは主にサーブレットによって完成する.MはModelを代表し、ソリューション全体のビジネスロジックの実現を担当し、最下位のデータベースもModelがアクセスし、操作する.VはViewを代表して、システムのユーザーへの展示を担当して、主にHTMLとJSPなどから
  • を完成します
  • ファクトリメソッドモード:オブジェクトを作成するインタフェースを定義し、サブクラスにどのクラスをインスタンス化するかを決定させます.ファクトリメソッドは、クラスのインスタンス化をサブクラスに遅延させる.
    工場の使用状況
  • コンパイル時に作成するオブジェクトのクラスを正確に予想できません.
  • クラスは、実行時に何を作成するかをサブクラスに決定させたい.
  • クラスにはいくつかの補助クラスがありますが、どのサブクラスを返したいかという情報のローカル話を返します.

  • メリットとデメリット
    利点:単純な工場モデルの利点はクライアントが直接製品を消費することができ、具体的な製品の実現に関心を持つ必要がなく、クライアントが直接製品オブジェクトを作成する責任を解消し、責任の分割を実現した.欠点:工場クラスはいくつかのすべての製品の創建ロジックを持っていて、いったん正常に仕事をすることができなくて、全体のシステムはすべて影響を受けて、その上製品クラスの多構造が複雑な時、すべての創建の仕事を1つの工場の中に入れて、事の後期のプログラムの拡張は比較的に困難です.
  • 代理代理の役割:委託側が渡した任務を完成し、委託側はいくつかの任務が自分で完成したくないが、まだ実現する必要がある場合、この任務を協議に保存し、代理が完成する.ただしエージェントはタスクを自発的に実行するわけではなく,エージェントに通知する必要がある.
  • KVO 1、概要KVO、すなわちKeyValue Observingは、指定されたオブジェクトのプロパティが変更されると、オブジェクトが通知を受け取るメカニズムを提供する.簡単に言えば、指定されたオブジェクトの属性が変更されるたびに、KVOは対応するオブジェクトに自動的に通知されます.二、使用方法システムフレームワークはKVOをサポートしているので、プログラマーは使用するときに非常に簡単です.
  • 登録、被観察者の属性を指定、
  • コールバック方法
  • を実現する
  • は、観察3を削除します.例:現在の画面に株価が表示され、株価が変更されると、その価格が更新されるシーンを想定します.1.DataModelの定義、
  •    [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の変化を引き起こす場合に適している.この場合、上記の例のように、属性の値を変更すると、傍受対象はすぐに通知される.