zoukankan      html  css  js  c++  java
  • 设计模式(中介者模式-对象去耦)

    声明:本系列文章内容摘自《iOS设计模式》

    中介者模式

             用一个对象来封装一系列对象的交互方式。中介者使个对象不需要显式地相互调用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

    何时使用中介者模式

    1.对象间的交互虽定义明确然而非常复杂,导致椅子对象彼此相互依赖而且难以理解;

    2.因为对象引用了许多其他对象并与其通信,导致对象难以复用;

    3.想要制定一个分布在多个对象中的逻辑或行为,又不想生成太多子类。

    举个例子

           有三个视图,我们可能需要两两之间进行跳转,类比于公司内同时每两个人都有可能进行业务上的交流。如果不借助通讯工具的话,公司内的每个人都需要相互认识。如果我们使用tabbarcontroller这一控件,三个是图相互切换就可以通过tabbar这一工具来实现,简化了两两跳转的复杂逻辑。类比于公司同事使用QQ群或者微信群进行业务交流。

    简单的代码说明:

    目录结构:

         三个控制器中没有代码,仅在tabbarcontroller中将它们添加进去。

    PatternRootViewController.h

    #import <UIKit/UIKit.h>
    
    typedef enum
    {
        kButtonTagFirst,
        kButtonTagSecond,
        kButtonTagThird
    }ButtonTag;
    
    @interface PatternRootViewController : UITabBarController
    
    +(PatternRootViewController *)sharedInstance;
    @end
    

     PatternRootViewController.m

    #import "PatternRootViewController.h"
    #import "FirstViewController.h"
    #import "SecondViewController.h"
    #import "ThirdViewController.h"
    @interface PatternRootViewController ()
    
    @end
    
    @implementation PatternRootViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        self.title = @"中介者模式";
        
        FirstViewController *firstVC = [[FirstViewController alloc] init];
        firstVC.tabBarItem.title = @"页面一";
        
        SecondViewController *secondVC = [[SecondViewController alloc] init];
        secondVC.tabBarItem.title = @"页面二";
        
        ThirdViewController *thirdVC = [[ThirdViewController alloc] init];
        thirdVC.tabBarItem.title = @"页面三";
        
        self.viewControllers = @[firstVC,secondVC,thirdVC];
    }
    
    #pragma mark - 创建实例
    +(PatternRootViewController *)sharedInstance
    {
        static PatternRootViewController *sharedCoordinatingController = nil;
        static dispatch_once_t predicate;
        dispatch_once(&predicate,^{
            sharedCoordinatingController = [[self alloc] init];
        });
        return sharedCoordinatingController;
    }
    
    @end
    

     总结

           虽然对于处理应用程序的行为分散与不同对象并且对象相互依存的情况,中介者模式非常有用,但是应该注意避免让中介者类过于庞大而难以维护。

  • 相关阅读:
    js获取Session问题 dodo
    复制一个datatable的指定行到另外一个datatable dodo
    sqlserver数据库备份与还原语句 dodo
    net软件测试实战技术大全 dodo
    AJAX 浏览器支持 dodo
    使用 vs2005进行负载测试 dodo
    sql使用in批量删除 dodo
    各种浏览器兼容存在的方法:Xenocode Browser Sandbox dodo
    C#调用Windows API函数 dodo
    ewebeditor在ie8下报错 dodo
  • 原文地址:https://www.cnblogs.com/wlsxmhz/p/6109304.html
Copyright © 2011-2022 走看看