阅读《研磨设计模式》笔记。之后若有所感,再补充。
中介者模式目的是:封装对象之间的交互。如果一个对象的状态改变会引起其他相关对象的变化,或一个对象的操作会引起其他对象的后续操作,可以使用中介者来完成这些关联关系。
场景问题:电脑主板与各个部件的关系
示例:
/**
* @description 中介者对象接口
* @author liuwei
* @date 2014-4-18
* @version 1.0
*/
public interface Mediator {
/**
* 同事对象在自身状态改变的时候来通知中介者对象,意思就是说告诉中介者我的状态改变了,那么其他相应的
* 事情也要接着往下做了。
*
* @param colleague 同事自身状态,好让中介者对象通过对象实例去获取同事的相应状态
*/
public void changed(Colleague colleague);
}
/**
* @description 所有同事的抽象父类定义
* @author liuwei
* @date 2014-4-18
* @version 1.0
*/
public abstract class Colleague {
private Mediator mediator;
public Colleague(Mediator mediator){
this.mediator = mediator;
}
public Mediator getMediator(){
return this.mediator;
}
}
/**
* @description 一个同事类,光驱类
* @author liuwei
* @date 2014-4-18
* @version 1.0
*/
public class CDDriver extends Colleague{
public CDDriver(Mediator mediator){
super(mediator);
}
/**
* 光驱读取出来的数据
*/
private String data = "";
public String getData(){
return this.data;
}
public void readCD(){
//规定逗号前是视频数据,逗号后是声音数据
this.data = "设计模式,值得好好研究";
//通知主板,也就是中介者:我状态有改变,请接着往下执行其他动作
this.getMediator().changed(this);
}
}
/**
* @description CPUs
* @author liuwei
* @date 2014-4-18
* @version 1.0
*/
public class CPU extends Colleague{
public CPU(Mediator mediator) {
super(mediator);
}
private String videoData = "";
private String soundData = "";
public String getVideoData(){
return this.videoData;
}
public String getSoundData(){
return this.soundData;
}
public void executeData(String data){
String[] ss = data.split(",");
this.videoData = ss[0];
this.soundData = ss[1];
this.getMediator().changed(this);
}
}
/**
* @description 显卡类
* @author liuwei
* @date 2014-4-18
* @version 1.0
*/
public class VideoCard extends Colleague{
public VideoCard(Mediator mediator) {
super(mediator);
}
public void showData(String data){
System.out.println("您正在观看的是:" + data);
}
}
/**
* @description 声卡
* @author liuwei
* @date 2014-4-18
* @version 1.0
*/
public class SoundCard extends Colleague{
public SoundCard(Mediator mediator) {
super(mediator);
}
public void soundData(String data){
System.out.println("画外音:" + data);
}
}
/**
* @description
* @author liuwei
* @date 2014-4-18
* @version 1.0
*/
public class MotherBoard implements Mediator{
private CDDriver cdDriver = null;
private CPU cpu = null;
private VideoCard videoCard = null;
private SoundCard soundCard = null;
public void setCdDriver(CDDriver cdDriver) {
this.cdDriver = cdDriver;
}
public void setCpu(CPU cpu) {
this.cpu = cpu;
}
public void setVideoCard(VideoCard videoCard) {
this.videoCard = videoCard;
}
public void setSoundCard(SoundCard soundCard) {
this.soundCard = soundCard;
}
/* (non-Javadoc)
* @see mediator.Mediator#changed(mediator.Colleague)
*/
@Override
public void changed(Colleague colleague) {
if(colleague == cdDriver){
this.opeCDDriverReadData(cdDriver);
}else if(colleague == cpu){
this.opeCPU(cpu);
}
}
private void opeCDDriverReadData(CDDriver cd){
String data = cd.getData();
this.cpu.executeData(data);
}
private void opeCPU(CPU cpu){
String videoData = cpu.getVideoData();
String soundData = cpu.getSoundData();
this.videoCard.showData(videoData);
this.soundCard.soundData(soundData);
}
}
/**
* @description
* @author liuwei
* @date 2014-4-18
* @version 1.0
*/
public class Client {
public static void main(String[] strs){
//1:创建中介者:主板对象
MotherBoard mediator = new MotherBoard();
//2:创建同事类
CDDriver cd = new CDDriver(mediator);
CPU cpu = new CPU(mediator);
VideoCard videoCard = new VideoCard(mediator);
SoundCard soundCard = new SoundCard(mediator);
//3:让中介者知道所有同事
mediator.setCdDriver(cd);
mediator.setCpu(cpu);
mediator.setVideoCard(videoCard);
mediator.setSoundCard(soundCard);
//4:开始
cd.readCD();
}
}
分享到:
相关推荐
【终结者2.2本地生成版】是一款针对软件授权验证技术的工具,它允许开发者在本地环境下生成软件的授权信息,以实现对软件使用的有效控制。这个版本的终结者主要聚焦于提供一种安全且便捷的方式来验证软件的合法性,...
【P2P终结者增强版】是一款专门针对局域网环境设计的网络管理软件,它允许用户限制局域网内其他计算机的网速。这款工具主要用于优化网络资源分配,防止某些设备过度占用带宽,从而影响整个网络的性能。然而,值得...
4. **隐藏模式**:为了防止被控制的设备发现并禁用,P2P终结者还提供了隐藏运行模式,使得软件能在后台安静地工作。 5. **安装与配置**:WinPcap_4_0_2.exe是Windows Packet Capture库,它是P2P终结者等网络监控...
程序采用100%纯汇编语言编写,实现了文件夹加/解密功能,程序体积小巧,加密速度快,支持U盘/移动硬盘上面的文件夹加密,方便安全,终结者文件夹加密大师有简单/高级两种加密模式。 终结者文件夹加密大师软件的功能...
P2P终结者是由Net.Soft工作室开发的一套专门用来控制企业网络P2P下载流量的网络管理软件(zol提供P2P终结者下载)。 P2P终结者针对目前P2P软件过多占用带宽的问题,提供了一个非常简单的解决方案。P2P终结者基于底层...
标题“反p2p终结者杀死局域网中的p2p终结者”指的是一个特定的软件或技术解决方案,用于在局域网环境中对抗P2P(peer-to-peer)终结者软件。P2P终结者是一种网络管理工具,它通常被用来限制或阻止局域网内的P2P文件...
值得一提的是,虽然广告终结者3.2.12.zip是针对360极速浏览器特别设计的,但是其标签却是“chrome”,这表明该插件可能也兼容Chrome浏览器,或者开发者正在计划推出适用于Chrome版本的广告终结者。不过,对于大多数...
在局域网终结者中,WinPcap可能被用来抓取和分析网络流量,以便找出可以利用的网络行为模式或IP地址信息。 **局域网终结者.exe** 这个可执行文件是局域网终结者的主要程序。它通过发送特定的数据包或者模拟IP冲突来...
4. **隐藏模式**:为了防止被控制的设备检测到并反制,P2P终结者还提供了隐藏模式,使得软件的运行更加隐蔽。 5. **远程管理**:对于大型网络环境,管理员可以通过远程控制功能管理不同位置的设备,实现全局的网络...
《P2P网络终结者4.7:局域网带宽管理利器》 P2P网络终结者4.7是一款专为局域网环境设计的带宽管理工具,它的主要功能在于帮助网络管理员或者普通用户有效地控制局域网内各台计算机对网络资源的占用,确保网络的公平...
标题中的“p2p终结者无线网卡专用版”是一个软件的特定版本,这通常意味着该软件是为无线网络环境优化的,特别是针对无线网卡的使用。P2P(peer-to-peer)终结者是一种网络管理工具,它主要用于限制局域网内其他设备...
《P2P终结者2.07免安装版:网络流量管理利器》 P2P终结者2.07免安装版是一款专为用户设计的网络流量管理工具,尤其适用于那些面临网络带宽被过度占用问题的用户。该版本无需进行繁琐的安装过程,用户可以直接运行,...
《封包终结者V1.2.21:网络数据包的掌控者》 在信息技术领域,网络数据包的分析和处理是至关重要的一个环节,尤其是对于网络安全、软件开发以及网络调试人员而言。"封包终结者V1.2.21"就是这样一款强大的工具,它...
程序永久免费,使用100%汇编语言编写,实现了文件夹加/解密的功能,程序体积小巧,加密速度快,支持U盘/移动硬盘上面的文件夹加密,方便安全,终结者文件夹加密大师有简单/高级/Vista(Server2008)三种加密模式,下面...
《五子棋终结者2.0:执黑必胜的智能策略分析》 五子棋,作为一项源远流长的智力游戏,深受全世界人民的喜爱。它不仅能够锻炼人的逻辑思维能力,还能够让人们在对弈中体会到策略的精妙与竞争的快感。尽管五子棋规则...
《P2P后台终结者源码解析》 P2P后台终结者,作为一个技术话题,主要涉及的是网络通信和系统管理领域。P2P(Peer-to-Peer)是一种分布式网络架构,它允许网络中的每个节点既是客户端也是服务器,能够直接进行数据...
标题中的“反p2p终结者”显然指的是一款针对P2P(peer-to-peer)网络的防护软件或工具,其主要目标是防止P2P软件对网络资源的过度占用或者阻止恶意P2P活动。P2P网络是一种分布式网络架构,用户之间可以直接交换数据...
【P2P终结者】是一种网络管理工具,主要用于局域网环境中的网速控制。它以其简单易用的特点,只需解压即可运行,为用户提供了一种便捷的方式来限制局域网内的P2P流量,以保障网络的稳定和高效运行。 在现代的网络...
在这样的背景下,录屏终结者这款软件应运而生,以其独特的无广告、绿色安装、功能全面等特性,成为了众多用户的首选。 首先,录屏终结者最为人称道的优势是其无广告的特性。如今,许多软件在使用过程中会插入广告,...
P2P终结者不仅可以帮助用户监控家庭网络中的数据流量,还能对P2P活动进行限制,从而确保网络资源被合理地分配给所有设备。 首先,让我们了解一下P2P技术。P2P是一种点对点的网络通信模式,用户既是信息的接收者,也...