`
huhu_long
  • 浏览: 72364 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

中介者模式

 
阅读更多
中介者模式, 主角当然是中介者。那中介者是干什么的呢? 问得好!

中介者的引入就是为了“解耦”。
很多同学可能会碰到一下情况。 A在做某件事的时候要依赖于B; 反过来B在做某事的时候也要依赖于A。 那这样就形成了相互依赖, 耦合度高。 于是乎, 中介者的出场便可以解决这个问题。

在下面的场景中, colleague1完成某个操作需要colleague2的两次check; 而colleague2在做某个操作的时候又先要从colleague1那获取feedback。

先看看客户端代码
public class Client {
	public static void main(String[] args) {
		ConcreteMediator mediator = new ConcreteMediator();
		ConcreteColleague1 c1 = new ConcreteColleague1(mediator);
		ConcreteColleague2 c2 = new ConcreteColleague2(mediator);

		c1.doSomethingColleague1Special();
		System.out.println();
		c2.doSomethingColleague2Special();
	}
}


运行结果:
引用
colleague2 check done
colleague2 double check done
已通过验证,colleague1可以开始做了

反馈消息给colleague2
已通过获得feedback,colleague2可以开始做了


然后是我们的中介者:
public abstract class AbstractMediator {
	protected ConcreteColleague1 colleague1;
	protected ConcreteColleague2 colleague2;

	public AbstractMediator() {
		this.colleague1 = new ConcreteColleague1(this);
		this.colleague2 = new ConcreteColleague2(this);
	}

	public abstract void interact1();
	public abstract void interact2();
}

public class ConcreteMediator extends AbstractMediator {

	// 这个就是所谓的事件方法, 用于处理对象之间的交互
	@Override
	public void interact1() {
		super.colleague2.check();
		super.colleague2.doubleCheck();
	}

	// 个人感觉如果在这个交互方法中只有单个操作, 完全可以直接在调用同事类中使用:
	// super.mediator.被调用同时类.方法 
	@Override
	public void interact2() {
		super.colleague1.feedback();
	}
}


同事类
public abstract class AbstractColleague {
	protected AbstractMediator mediator;

	public AbstractColleague(AbstractMediator mediator) {
		this.mediator = mediator;
	}
}

public class ConcreteColleague1 extends AbstractColleague {

	public ConcreteColleague1(AbstractMediator mediator) {
		super(mediator);
	}

	public void doSomethingColleague1Special(){
		super.mediator.interact1();
		System.out.println("已通过验证,colleague1可以开始做了");
	}

	public void feedback() {
		System.out.println("反馈消息给colleague2");
	}
}

public class ConcreteColleague2 extends AbstractColleague {

	public ConcreteColleague2(AbstractMediator mediator) {
		super(mediator);
	}

	public void check() {
		System.out.println("check done");
	}

	public void doubleCheck() {
		System.out.println("double check done");
	}

	public void doSomethingColleague2Special() {
		super.mediator.interact2();
		System.out.println("已通过获得feedback,colleague2可以开始做了");
	}
}
分享到:
评论

相关推荐

    终结者2.2本地生成版+终结者完整金牌验证-源码

    【终结者2.2本地生成版】是一款针对软件授权验证技术的工具,它允许开发者在本地环境下生成软件的授权信息,以实现对软件使用的有效控制。这个版本的终结者主要聚焦于提供一种安全且便捷的方式来验证软件的合法性,...

    P2P终结者增强 版

    【P2P终结者增强版】是一款专门针对局域网环境设计的网络管理软件,它允许用户限制局域网内其他计算机的网速。这款工具主要用于优化网络资源分配,防止某些设备过度占用带宽,从而影响整个网络的性能。然而,值得...

    P2P终结者4.07

    4. **隐藏模式**:为了防止被控制的设备发现并禁用,P2P终结者还提供了隐藏运行模式,使得软件能在后台安静地工作。 5. **安装与配置**:WinPcap_4_0_2.exe是Windows Packet Capture库,它是P2P终结者等网络监控...

    终结者文件加密大师

    程序采用100%纯汇编语言编写,实现了文件夹加/解密功能,程序体积小巧,加密速度快,支持U盘/移动硬盘上面的文件夹加密,方便安全,终结者文件夹加密大师有简单/高级两种加密模式。 终结者文件夹加密大师软件的功能...

    p2p终结者4.34

    P2P终结者是由Net.Soft工作室开发的一套专门用来控制企业网络P2P下载流量的网络管理软件(zol提供P2P终结者下载)。 P2P终结者针对目前P2P软件过多占用带宽的问题,提供了一个非常简单的解决方案。P2P终结者基于底层...

    反p2p终结者杀死局域网中的p2p终结者

    标题“反p2p终结者杀死局域网中的p2p终结者”指的是一个特定的软件或技术解决方案,用于在局域网环境中对抗P2P(peer-to-peer)终结者软件。P2P终结者是一种网络管理工具,它通常被用来限制或阻止局域网内的P2P文件...

    广告终结者3.2.12.zip

    值得一提的是,虽然广告终结者3.2.12.zip是针对360极速浏览器特别设计的,但是其标签却是“chrome”,这表明该插件可能也兼容Chrome浏览器,或者开发者正在计划推出适用于Chrome版本的广告终结者。不过,对于大多数...

    局域网终结者1.0

    在局域网终结者中,WinPcap可能被用来抓取和分析网络流量,以便找出可以利用的网络行为模式或IP地址信息。 **局域网终结者.exe** 这个可执行文件是局域网终结者的主要程序。它通过发送特定的数据包或者模拟IP冲突来...

    P2P终结者安装包

    4. **隐藏模式**:为了防止被控制的设备检测到并反制,P2P终结者还提供了隐藏模式,使得软件的运行更加隐蔽。 5. **远程管理**:对于大型网络环境,管理员可以通过远程控制功能管理不同位置的设备,实现全局的网络...

    p2p网络终结者4.7

    《P2P网络终结者4.7:局域网带宽管理利器》 P2P网络终结者4.7是一款专为局域网环境设计的带宽管理工具,它的主要功能在于帮助网络管理员或者普通用户有效地控制局域网内各台计算机对网络资源的占用,确保网络的公平...

    p2p终结者无线网卡专用版p2p终结者无线网卡专用版

    标题中的“p2p终结者无线网卡专用版”是一个软件的特定版本,这通常意味着该软件是为无线网络环境优化的,特别是针对无线网卡的使用。P2P(peer-to-peer)终结者是一种网络管理工具,它主要用于限制局域网内其他设备...

    p2p终结者2.07免安装版

    《P2P终结者2.07免安装版:网络流量管理利器》 P2P终结者2.07免安装版是一款专为用户设计的网络流量管理工具,尤其适用于那些面临网络带宽被过度占用问题的用户。该版本无需进行繁琐的安装过程,用户可以直接运行,...

    封包终结者V1.2.21

    《封包终结者V1.2.21:网络数据包的掌控者》 在信息技术领域,网络数据包的分析和处理是至关重要的一个环节,尤其是对于网络安全、软件开发以及网络调试人员而言。"封包终结者V1.2.21"就是这样一款强大的工具,它...

    终结者文件夹加密大师,好用方便

    程序永久免费,使用100%汇编语言编写,实现了文件夹加/解密的功能,程序体积小巧,加密速度快,支持U盘/移动硬盘上面的文件夹加密,方便安全,终结者文件夹加密大师有简单/高级/Vista(Server2008)三种加密模式,下面...

    五子棋终结者2.0 五子棋终结者是一个计算机执黑必胜的五子棋小程序,严格地、完全地毯式地终结了自由规则下的五子棋!

    《五子棋终结者2.0:执黑必胜的智能策略分析》 五子棋,作为一项源远流长的智力游戏,深受全世界人民的喜爱。它不仅能够锻炼人的逻辑思维能力,还能够让人们在对弈中体会到策略的精妙与竞争的快感。尽管五子棋规则...

    P2P后台终结者源码

    《P2P后台终结者源码解析》 P2P后台终结者,作为一个技术话题,主要涉及的是网络通信和系统管理领域。P2P(Peer-to-Peer)是一种分布式网络架构,它允许网络中的每个节点既是客户端也是服务器,能够直接进行数据...

    反p2p终结者 反p2p终结者

    标题中的“反p2p终结者”显然指的是一款针对P2P(peer-to-peer)网络的防护软件或工具,其主要目标是防止P2P软件对网络资源的过度占用或者阻止恶意P2P活动。P2P网络是一种分布式网络架构,用户之间可以直接交换数据...

    P2P终结者,只需解压即可

    【P2P终结者】是一种网络管理工具,主要用于局域网环境中的网速控制。它以其简单易用的特点,只需解压即可运行,为用户提供了一种便捷的方式来限制局域网内的P2P流量,以保障网络的稳定和高效运行。 在现代的网络...

    录屏终结者,录屏实用软件,无广告绿色功能齐全

    在这样的背景下,录屏终结者这款软件应运而生,以其独特的无广告、绿色安装、功能全面等特性,成为了众多用户的首选。 首先,录屏终结者最为人称道的优势是其无广告的特性。如今,许多软件在使用过程中会插入广告,...

    P2P终结者-家庭版.rar. 下载额。

    P2P终结者不仅可以帮助用户监控家庭网络中的数据流量,还能对P2P活动进行限制,从而确保网络资源被合理地分配给所有设备。 首先,让我们了解一下P2P技术。P2P是一种点对点的网络通信模式,用户既是信息的接收者,也...

Global site tag (gtag.js) - Google Analytics