Target/Action 设计模式

Target/Action 设计模式介绍

Target/Action 设计模式可以实现高内聚低耦合的特点, 可以实现解耦

在一般的视图类中, 如果直接使用触摸事件的响应方法的话, 不够灵活, 对于不同的视图,在相同的触摸事件中如果要实现不同的功能, 那么每次使用触摸事件时, 都需要修改代码, 非常麻烦.

我们可以通过 Target/Action 设计模式, 让我们的 View类 像 Button 一样灵活(Button 的响应方法就是 target/action 设计模式)

//添加 Button 的响应事件
[button addTarget:self action:@selector(handleButtonAction:) forControlEvents:UIControlEventTouchUpInside];

Target/Action 设计模式的使用步骤

1 . 在我们的 View 类中的.h文件定义一个给外界提供的接口, 用于获取触摸响应的目标(target), 以及响应触摸事件之后需要实现的方法(action)

- (void)addTarget:(id)target Action:(SEL)action;

2 . 在我们的 View 类的延展中定义两个实例变量

{
    //此处只做简单地存储, 不牵扯到 alloc, 及内存管理问题, 可以直接使用
    id _target;//存储响应的目标
    SEL _action;//存储响应的方法
}

3 . 在 View 的.m文件中实现 addTarget: Action: 方法

- (void)addTarget:(id)target Action:(SEL)action {
    //存储外界的响应目标和方法
    _target = target;
    _action = action;
}

4 . 在触摸事件的方法中, 实现当 view 接到触摸事件时, 通知 target 执行 action 的功能.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    // 当 View 接到触摸事件时, 通知 target 执行 action 方法
    [_target performSelector:_action withObject:self];
}

5 . 在视图控制器中调用 addTarget: Action: 方法

ActionView *redView = [[ActionView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
redView.tag = 200;
redView.backgroundColor = [UIColor redColor];
[redView addTarget:self Action:@selector(changeSelfColor:)];
[self.view addSubview:redView];
[redView release];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Struts采用了MVC(Model-View-Controller)设计模式。在这个模式中,Struts的作用主要是担当控制器的角色,负责接收用户请求并进行处理。通过ActionForm、ActionMapping、ActionError和ValidatorForm等对象,Struts能够有效地处理用户请求并将结果返回给视图层进行展示。这种设计模式使得代码更加模块化和可扩展,同时也提高了代码的复用性和可维护性。在Struts中,控制器层与视图层和模型层进行了解耦,能够更好地进行分工合作,提高开发效率。同时,由于Struts采用了单实例多线程的方式来处理Http请求,因此在处理过程中需要注意线程安全问题,确保数据的正确性和一致性。总之,Struts的设计模式是MVC,通过控制器层来处理用户请求并进行相应的业务逻辑处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Struts的设计模式](https://blog.csdn.net/u012141686/article/details/11723629)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Struts2中的设计模式----ThreadLocal模式](https://blog.csdn.net/weixin_34248487/article/details/85516119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值