23种设计模式-中介者模式
创始人
2024-05-28 14:50:12
0

中介者模式是一种行为型设计模式,用于减少对象之间的直接耦合,并将它们的通信集中在一个中介对象中。这个中介对象负责协调对象之间的交互,从而使对象之间的关系更加松散。

在本文中,我们将通过Java代码举例说明中介者模式,并介绍在Android开发中实际应用中的一些例子和源码解析。

示例

在中介者模式中,有两种角色:中介者和同事。中介者负责协调同事之间的交互,而同事则通过中介者来交互。以下是一个简单的示例,说明中介者如何在两个同事之间进行交互:

// 定义同事接口
public interface Colleague {void send(String message);void receive(String message);
}// 定义中介者接口
public interface Mediator {void addColleague(Colleague colleague);void send(String message, Colleague colleague);
}// 定义具体同事类
public class ConcreteColleague implements Colleague {private Mediator mediator;private String name;public ConcreteColleague(Mediator mediator, String name) {this.mediator = mediator;this.name = name;}@Overridepublic void send(String message) {mediator.send(message, this);}@Overridepublic void receive(String message) {System.out.println(name + " received message: " + message);}
}// 定义具体中介者类
public class ConcreteMediator implements Mediator {private List colleagues = new ArrayList<>();@Overridepublic void addColleague(Colleague colleague) {colleagues.add(colleague);}@Overridepublic void send(String message, Colleague sender) {for (Colleague colleague : colleagues) {if (colleague != sender) {colleague.receive(message);}}}
}// 客户端代码
public class Client {public static void main(String[] args) {Mediator mediator = new ConcreteMediator();Colleague colleague1 = new ConcreteColleague(mediator, "Colleague 1");Colleague colleague2 = new ConcreteColleague(mediator, "Colleague 2");mediator.addColleague(colleague1);mediator.addColleague(colleague2);colleague1.send("Hello, Colleague 2!");}
}

在这个示例中,我们定义了一个Colleague接口和一个Mediator接口,以及具体的同事类ConcreteColleague和具体的中介者类ConcreteMediator。在客户端代码中,我们创建了两个具体同事对象,并将它们添加到中介者对象中。然后,我们调用其中一个同事对象的send方法,向另一个同事对象发送一条消息。中介者接收到这条消息后,将它转发给所有其他的同事对象。

在这个示例中,中介者对象负责协调同事之间的交互,将它们的通信集中在一个中介对象中,从而实现了对象之间的松散耦合。这种设计模式非常适用于需要协调多个对象之间交互的场景,特别是当对象之间的交互复杂或难以维护时。

在Android开发中,中介者模式有多种应用。以下是一些实际应用中的例子:

1、EventBus

EventBus是一个开源的Android事件发布/订阅库,它使用了中介者模式。在EventBus中,事件发布者只需要发布事件,而不需要知道谁将接收它,而订阅者只需要订阅它们感兴趣的事件,而不需要知道是谁发布了它。这样,发布者和订阅者之间的交互就由EventBus作为中介来处理,从而实现了对象之间的松散耦合。

以下是一个简单的示例,展示了如何使用EventBus在两个Activity之间传递数据:

// 定义事件类
public class DataEvent {private String data;public DataEvent(String data) {this.data = data;}public String getData() {return data;}
}// 发布事件
EventBus.getDefault().post(new DataEvent("Hello, SecondActivity!"));// 订阅事件
@Subscribe(threadMode = ThreadMode.MAIN)
public void onDataEvent(DataEvent event) {String data = event.getData();textView.setText(data);
}

在这个示例中,我们定义了一个DataEvent事件类,并使用EventBus将它发布到默认的事件总线上。在另一个Activity中,我们订阅了这个事件,并在onDataEvent方法中接收到数据,并将它显示在TextView中。

2、ViewModel

在Android开发中,ViewModel是一个非常重要的组件,用于管理应用程序的界面状态和数据。ViewModel使用了中介者模式来协调视图和模型之间的交互,从而实现了松散耦合。

以下是一个简单的示例,展示了如何使用ViewModel来管理Activity的数据:

public class MyViewModel extends ViewModel {private MutableLiveData data = new MutableLiveData<>();public void setData(String newData) {data.setValue(newData);}public LiveData getData() {return data;}
}// 在Activity中使用ViewModel
public class MainActivity extends AppCompatActivity {private MyViewModel viewModel;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);viewModel = new ViewModelProvider(this).get(MyViewModel.class);viewModel.getData().observe(this, new Observer() {@Overridepublic void onChanged(String newData) {textView.setText(newData);}});}public void onButtonClicked(View view) {viewModel.setData("Hello, ViewModel!");}
}

在这个示例中,我们定义了一个MyViewModel类,它继承自ViewModel类,并使用LiveData来管理数据。在Activity中,我们通过ViewModelProvider来获取MyViewModel实例,并使用LiveData的observe方法来监听数据的变化。当用户点击按钮时,我们调用MyViewModel的setData方法来更新数据,从而触发LiveData的onChanged方法,进而更新界面上的TextView。

中介者模式具有以下优点:

  1. 松散耦合:中介者模式可以将对象之间的交互解耦,从而使得系统更加灵活、可扩展和易于维护。
  2. 集中控制:中介者模式将对象之间的交互集中到一个中介对象中,从而使得系统更加可控。
  3. 降低复杂度:中介者模式可以降低系统的复杂度,因为它可以将对象之间的复杂交互转化为简单的点对点交互。

中介者模式也有以下缺点:

  1. 增加了中介者对象的复杂度:中介者对象需要知道所有相关对象的信息,因此可能变得比较复杂。
  2. 增加了系统的运行时间和空间开销:由于中介者对象需要协调所有相关对象之间的交互,因此可能会增加系统的运行时间和空间开销。
  3. 不适合大规模系统:中介者模式在大规模系统中的效率可能会降低,因为它需要处理大量的对象之间的交互。

总结

中介者模式是一种非常有用的设计模式,它可以将对象之间的交互解耦,并集中控制交互过程。在Android开发中,中介者模式有多种应用,例如EventBus和ViewModel。使用中介者模式可以使得Android应用更加灵活、可扩展和易于维护。

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...