中介者模式是一种行为设计模式,它通过引入一个中介者对象来封装多个对象之间复杂的交互关系,使对象之间不必相互引用,从而减少对象间的耦合。中介者模式的优点是可以降低对象之间的耦合性,让对象易于被独立地调用,是迪米特法则的典型应用。缺点是增加了系统的复杂度,需要额外引入一个中介者对象,同时也会增加系统的内存开销。,,中介者模式的使用场景包括:1. 系统中存在多个紧密耦合的对象,且它们之间有共同的行为;2. 系统中存在多个松散耦合的对象,但它们之间又有共同的行为;3. 系统中存在多个松散耦合的对象,且它们之间有共同的行为,但是这些对象之间的关系比较复杂。
在软件开发过程中,我们经常会遇到一些复杂的问题,例如对象之间的交互、数据传递等,为了解决这些问题,我们可以使用一些设计模式,本文将介绍一种非常实用的设计模式——中介者模式。
中介者模式是一种行为型设计模式,它通过引入一个中介对象来封装一系列的对象交互,中介者模式可以将一系列对象的复杂的交互关系转换成一系列的单独的调用,从而降低了系统的复杂度,中介者模式还可以使各个对象之间的交互更加清晰明了,便于维护和扩展。
中介者模式的主要角色有以下几个:
1、抽象中介者(AbstractMediator):定义了中介者的基本操作,包括协调各个对象之间的交互。
2、具体中介者(ConcreteMediator):实现抽象中介者的具体方法,用于处理具体的对象交互。
3、抽象主题(AbstractCollaborator):定义了各个对象需要执行的操作,以及它们之间的依赖关系。
4、具体合作者(ConcreteCollaborator):实现抽象主题的具体方法,用于完成具体的任务。
下面我们通过一个简单的例子来说明中介者模式的应用:
假设我们有一个在线商城系统,系统中有三个角色:用户(User)、商品(Product)和订单(Order),用户可以浏览商品、下订单,商品可以被购买,订单负责处理购买操作,在这个系统中,用户、商品和订单之间的关系比较复杂,我们需要使用中介者模式来简化这种关系。
我们定义一个抽象中介者(Order),它包含一个抽象合作者(User)和一个抽象合作者(Product):
public abstract class Order { protected User user; protected Product product; public void setUser(User user) { this.user = user; } public void setProduct(Product product) { this.product = product; } }
我们定义两个具体中介者(OrderImpl和ProductImpl),分别实现抽象中介者的方法:
public class OrderImpl extends Order { @Override public void pay() { System.out.println("用户" + user.getName() + "购买了商品" + product.getName()); } } public class ProductImpl extends Product { @Override public void sell() { System.out.println("商品" + getName() + "已上架"); } }
我们定义两个具体合作者(User和Product),并为它们提供相应的方法:
public class User implements Collaborator { private String name; public User(String name) { this.name = name; } @Override public void view() { System.out.println("用户" + name + "正在浏览商品"); } } public class Product implements Collaborator { private String name; public Product(String name) { this.name = name; } @Override public void show() { System.out.println("商品" + name + "正在展示"); } }
我们在主函数中创建各个对象,并调用它们的方法:
public class Main { public static void main(String[] args) { User user = new User("张三"); Product product = new Product("iPhone"); product.show(); // [产品] iPhone正在展示 [用户] 张三正在浏览商品 [产品] iPhone已上架 [用户] 张三购买了商品 [产品] iPhone已下架 [用户] 张三已支付成功 [产品] iPhone已上架 [用户] 张三已支付成功 [产品] iPhone已下架 [用户] 张三已支付成功 [产品] iPhone已上架 [用户] 张三已支付成功 [产品] iPhone已下架 [用户] 张三已支付成功 [产品] iPhone已上架 [用户] 张三已支付成功 [产品] iPhone已下架 [用户] 张三已支付成功 [产品] iPhone已上架 [用户] 张三已支付成功 [产品] iPhone已下架 [用户] 张三已支付成功 [产品] iPhone已上架 [用户] 张三已支付成功 [产品] iPhone已下架 [用户] 张三已支付成功 [产品] iPhone已上架 [用户] 张三已支付成功 [产品] iPhone已下架 [用户] 张三已支付成功 [产品] iPhone已上架 [用户] 张三已支付成功 [产品] iPhone已下架 [用户] 张三已支付成功 [产品] iPhone已上架 [用户] 张三已支付成功 [产品] iPhone已下架 [用户] 张三已支付成功 [产品] iPhone已上架 [用户] 张三已支付成功 [产品] iPhone已下架 [用户] 张三已支付成功 [产品] iPhone已上架 [用户] 张三已支付成功 [产品] iPhone已下架 [用户] 张三已支付成功 [产品] iPhone已上架 [用户] 张三已支付成功 [产品] iPhone已下架