中介者模式(软考)

Mediator(中介者)

意图:

用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

适用性:

  • 一组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解。
  • 一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。
  • 想定制一个分布在多个类中的行为,而又不想生成太多的字类。
package 中介者模式;

public class MediatorPattern {
    public static void main(String[] args) {
        ConcreteMediator mediator = new ConcreteMediator();

        Colleague1 colleague1 = new Colleague1(mediator);    //这里的作用使分别将中介者传入两个同事中
        Colleague2 colleague2 = new Colleague2(mediator);

        mediator.setColleague1(colleague1);    //在具体的中介者中传入两个同事
        mediator.setColleague2(colleague2);

        colleague1.sendMessage("软考加油");
        colleague2.sendMessage("祝大家软考顺利通过!");
    }
}


abstract class Colleague{              //同事类
    protected Mediator mediator;    //引用指针

}

class Colleague1 extends Colleague{
    public Colleague1(Mediator mediator){
        this.mediator = mediator;
    }
    public void sendMessage(String message){                //同事1调用sendMessage()方法,message=”软考加油“
        mediator.sendMessage(message,this);   //要有发送的消息和发送者,这里用this来调用自身,这里mediator是上面实例化具体中介者的字类名
    }
    public void Notify(String message){
        System.out.println("同事1收到消息:"+message);

    }
}


class Colleague2 extends Colleague{
    public Colleague2(Mediator mediator){
        this.mediator= mediator;
    }
    public void sendMessage(String message){
        mediator.sendMessage(message,this);  //要有发送的消息和发送者,这里用this来调用自身
    }

    public void Notify(String message){
        System.out.println("同事2收到消息:"+message);
    }
}

abstract class Mediator{    //定义一个中介者类
    public abstract void sendMessage(String message,Colleague colleague);        //中介者模式就是利用中介者来充当传递信息的中间人
}


class ConcreteMediator extends Mediator{
    private Colleague1 colleague1;
    private Colleague2 colleague2;

    public void setColleague1(Colleague1 colleague1){
        this.colleague1 = colleague1;
    }


    public void setColleague2(Colleague2 colleague2){
        this.colleague2 = colleague2;
    }

    public void sendMessage(String message,Colleague colleague){
        if(colleague == colleague1) {
            colleague2.Notify(message);// 让同事2收到消息
        }else{
            colleague1.Notify(message);// 让同事1收到消息
        }
    }
}、











试题2020下半年试题六

试题六(共 15 分)

阅读下列说明和 Java 代码,将应填入 (n) 处的字句写在答题纸的对应栏内。

【说明】

在线支付是电子商务的一个重要环节,不同的电子商务平台提供了不同的支付接口。现

在需要整合不同电子商务平台的支付接口,使得客户在不同平台上购物时,不需要关心具体

的支付接口。拟采用中介者(Mediator)设计模式来实现该需求,所设计的类图如图 6-1 所

示。

从图6-1 类图可以得到的信息有:

1.Amazon类和Ebay类继承WebService类,ConcreteServiceMediator类继承webServiceMediator类(这里的考点有)

有一或者二空是填写(extends)关键字

填写(abstract或者interface)关键字,具体看extends|implements来判断

根据抽象类或者接口的特点,字类继承父类或者实现接口的所有抽象方法

还有可能考super方法的调用,调用父类的方法或者构造函数

2.WebService 有一个依赖 箭头从WebServiceMediator指向

这可以考一个在WebServiceMediator类中创建一个指针(引用对象),来为构造函数赋值,补充(若是组合或者聚合关系,则是在类中补充对应类型 变量名)

3.具体支付接口有多个,可能会考泛化,

List arrayList = new ArrayList();

【Java 代码】 
import java.util.*; 
 
interface WebServiceMediator {   //定义一个接口中介者
public (1)void buy(double money, WebService service);   //这里可以一般根据实现的字类类判断具体是哪个抽象方法
public void SetAmazon(WebService amazon);  //这里创建了两个支付方法
public void SetEbay(WebService ebay); 
} 
 
abstract class WebService { //定义了一个抽象类
protected (2)WebServiceMediator mediator; //这里就是依赖那个关系,相当于引用的作用
public abstract void SetMediator(WebServiceMediator mediator); 
public (3)  abstract void buyService(double money); //这里应该根据extends的子类来判断是什么方法,注意这里需要加abstract
public abstract void search(double money); 
}  
 
class ConcreteServiceMediator implements WebServiceMediator {  //定义了一个具体的中介者
private WebService amazon; //这里是想把这两个支付方式传入中介者当中(这是中介者模式的行为)
private WebService ebay; 
 
 public ConcreteServiceMediator() { //定义了一个无参构造方法
amazon = null; 
ebay = null; 
} 
 
 public void SetAmazon(WebService amazon) { 
this.amazon = amazon; 
} 
 
 public void SetEbay(WebService ebay) { 
this.ebay = ebay; 
} 
 
 public void buy(double money, WebService service) {  //定义了一个参数为钱,一个参数为是哪种支付接口的服务
if (service == amazon) 
amazon.search(money); 
else 
ebay.search(money); 
} 
} 
class Amazon extends WebService { 
public void SetMediator(WebServiceMediator mediator) { 
this.mediator = mediator; 
} 
 
 public void buyService(double money) { 
 (4)mediator.buy(money,this);    //4与5空相似,答案应该差不多,这个是中介者模式,前面定义的buy方法没有用,还出现了两次,则buy方法必须考,则就是调用buy
                                   方法,这里只有mediator对象,用mediator来调用,参数第二个this代表调用自身。
} 
 
 public void search(double money) { 
System.out.println("Amazon receive:" + money); 
} 
} 
 
class Ebay extends WebService { 
public void SetMediator(WebServiceMediator mediator) { 
this.mediator = mediator; 
} 
 
 public void buyService(double money) { 
 (5)mediator.buy(money,this) ; 
} 
 
 public void search(double money) { 
System.out.println("Ebay receive:" + money); 
} 
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python中的中介者模式是一种行为型设计模式,它允许对象之间通过一个中介者对象进行通信,而不是直接相互引用。这种模式可以减少对象之间的耦合度,使得系统更加灵活和易于维护。 在Python中,可以通过定义一个中介者类来实现中介者模式。该类通常包含一个或多个方法,用于处理对象之间的通信。当一个对象需要与另一个对象通信时,它将消息发送给中介者对象,中介者对象再将消息转发给目标对象。 下面是一个简单的示例代码: ```python class Mediator: def __init__(self): self.colleague1 = Colleague1(self) self.colleague2 = Colleague2(self) def send_message(self, message, colleague): if colleague == self.colleague1: self.colleague2.receive_message(message) else: self.colleague1.receive_message(message) class Colleague1: def __init__(self, mediator): self.mediator = mediator def send_message(self, message): self.mediator.send_message(message, self) def receive_message(self, message): print("Colleague1 received message:", message) class Colleague2: def __init__(self, mediator): self.mediator = mediator def send_message(self, message): self.mediator.send_message(message, self) def receive_message(self, message): print("Colleague2 received message:", message) mediator = Mediator() mediator.colleague1.send_message("Hello from Colleague1") mediator.colleague2.send_message("Hello from Colleague2") ``` 在上面的示例中,Mediator类充当中介者,Colleague1和Colleague2类充当对象。当Colleague1需要与Colleague2通信时,它将消息发送给Mediator对象,Mediator对象再将消息转发给Colleague2对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值