1. MVC(Model-View-Controller)模式
  2. MVP(Model-View-Presenter)模式
  3. MVVM(Model-View-ViewModel)模式
  4. Singleton(单例)模式
  5. Factory(工厂)模式
  6. Observer(观察者)模式
  7. Strategy(策略)模式
  8. Adapter(适配器)模式

这些设计模式都有不同的特点和用途,在开发 Android 应用程序时可以根据具体的需求进行选择。

MVP(Model-View-Presenter)模式是一种改进的 MVC 模式,它将控制器(Controller)替换为了 Presenter。Presenter 旨在将模型(Model)和视图(View)分离,并将逻辑放在 Presenter 中。在 MVP 中,视图是被动的,它只负责展示数据和接收用户输入,而 Presenter 则负责响应用户输入、更新数据和控制视图状态。

以下是 MVP 模式的三个组件:

  • 模型(Model):模型层表示应用程序的数据和业务逻辑。它可以包括数据结构、数据库操作、API 调用等。在 Android 中,模型通常由 Java 类或者使用 Room 框架的数据库表示。
  • 视图(View):视图层表示用户界面。它可以包括布局、控件、样式等。在 Android 中,视图通常由 XML 布局文件表示。
  • Presenter:Presenter 是连接模型和视图的中间人。它负责处理用户输入、更新数据和控制视图状态。在 Android 中,Presenter 通常由 Java 类表示。

以下是一个简单的 Android 应用程序,其中使用了 MVP 设计模式。

模型:

public class UserModel {
    private String name;
    private int age;

    public UserModel(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

视图:

public interface UserView {
    void showUser(UserModel user);
}

Presenter:

public class UserPresenter {
    private UserView view;
    private UserModel model;

    public UserPresenter(UserView view) {
        this.view = view;
        this.model = new UserModel("Tom", 25);
    }

    public void updateUser(String name, int age) {
        model.setName(name);
        model.setAge(age);
        view.showUser(model);
    }
}

Activity:

public class MainActivity extends AppCompatActivity implements UserView {
    private UserPresenter presenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        presenter = new UserPresenter(this);
    }

    public void onClickUpdateUser(View view) {
        EditText nameEditText = findViewById(R.id.nameEditText);
        EditText ageEditText = findViewById(R.id.ageEditText);
        String name = nameEditText.getText().toString();
        int age = Integer.parseInt(ageEditText.getText().toString());
        presenter.updateUser(name, age);
    }

    @Override
    public void showUser(UserModel user) {
        TextView nameTextView = findViewById(R.id.nameTextView);
        TextView ageTextView = findViewById(R.id.ageTextView);
        nameTextView.setText(user.getName());
        ageTextView.setText(String.valueOf(user.getAge()));
    }
}

在上面的示例代码中,Presenter 对用户输入进行处理,并根据用户输入更新数据。当数据发生更改时,Presenter 调用视图的 showUser 方法,以更新界面。因此,模型和视图之间是相互独立的,Presenter 负责它们之间的通信和控制。

在实际开发中,Presenter 还可以实现一些其他的功能,比如:

  • 从服务器获取数据,并将数据更新到视图上。
  • 处理用户操作,比如点击事件和长按事件。
  • 处理应用程序的生命周期事件,比如 onCreate、onStart、onResume 等。

MVP 模式的优点如下:

  • 它可以使代码更加清晰和易于维护。
  • 它可以降低模块之间的耦合度,使得修改一个模块时不会影响其他模块。
  • 它可以使测试更加容易,因为每个组件都是相互独立的。

但是,MVP 模式也有一些缺点:

  • 它需要编写更多的代码,因为需要编写 Presenter 类来处理逻辑。
  • 它需要更多的时间和精力来设计和实现,因为需要考虑如何分离视图、模型和 Presenter。

总之,MVP 模式是一种非常有用的设计模式,它可以使代码更加清晰和易于维护,特别是在开发大型 Android 应用程序时。