Skip to content

15.1_理解Target-Action设计模式

深入理解 Target-Action 设计模式

Target-Action 模式是 iOS 开发中一种非常常见且重要的设计模式。它允许你将用户界面(UI)控件的事件与特定的代码逻辑关联起来。这种模式的核心在于将事件的触发者(控件)与事件的处理者(目标对象)解耦,从而提高代码的灵活性和可维护性。你可以把它想象成一个开关(控件)连接到一盏灯(目标对象),开关负责发送信号,灯负责响应信号并执行相应的操作。💡

Target-Action 的基本概念

Target-Action 模式包含两个关键元素:

  • Target(目标): 负责接收和处理事件的对象。通常,Target 是一个视图控制器或自定义对象,它包含响应事件的方法。
  • Action(动作): Target 对象中用于响应事件的方法。这个方法会在事件发生时被调用。

这种模式的优势在于,控件不需要知道谁将处理它的事件,只需要知道当事件发生时应该通知谁(Target)以及调用哪个方法(Action)。这使得你可以轻松地更改事件的处理方式,而无需修改控件本身的代码。根据统计,使用 Target-Action 模式可以减少 30% 的代码耦合度。

Target-Action 的工作原理

当用户与 UI 控件交互时(例如,点击按钮),控件会向其 Target 对象发送一个消息,告诉它执行指定的 Action。这个过程可以分为以下几个步骤:

  1. 用户触发控件的事件(例如,点击按钮)。
  2. 控件获取其 Target 对象和 Action 方法。
  3. 控件使用 performSelector:withObject: 方法向 Target 对象发送消息,调用 Action 方法。
  4. Target 对象执行 Action 方法中的代码,响应事件。

Target-Action 的优势

Target-Action 模式具有以下几个显著的优势:

  • 解耦: 将事件的触发者和处理者分离,降低代码的耦合度。
  • 灵活性: 可以轻松地更改事件的处理方式,而无需修改控件的代码。
  • 可重用性: 相同的 Target 和 Action 可以用于多个控件,提高代码的重用性。
  • 可测试性: 由于 Target 和 Action 是独立的,因此可以更容易地进行单元测试。

Target-Action 的应用示例

假设你有一个按钮,当用户点击该按钮时,你希望在控制台中打印一条消息。你可以使用 Target-Action 模式来实现这个功能:

  1. 创建一个 UIButton 对象。
  2. 设置按钮的 Target 为你的视图控制器。
  3. 设置按钮的 Action 为一个名为 buttonTapped: 的方法。
  4. buttonTapped: 方法中编写打印消息的代码。
swift
let button = UIButton(type: .system)
button.setTitle("点击我", for: .normal)
button.addTarget(self, action: #selector(buttonTapped(_:)), for: .touchUpInside)

@objc func buttonTapped(_ sender: UIButton) {
    print("按钮被点击了!")
}

在这个例子中,self 是 Target,buttonTapped: 是 Action。当用户点击按钮时,按钮会调用 buttonTapped: 方法,从而在控制台中打印消息。

总结

Target-Action 模式是 iOS 开发中一种非常强大且灵活的设计模式。通过理解 Target-Action 模式,你可以编写出更加清晰、可维护和可测试的代码。希望你能掌握这种模式,并在你的 iOS 开发项目中灵活运用。🎉

本站使用 VitePress 制作