`

中介者模式

 
阅读更多
<!--StartFragment-->

抽象中介者(Mediator) 角色: 抽象中介者角色定义统一的接口用于各同事角色之间的通信。

package MediatorPattern.mediator;

import MediatorPattern.colleague.Purchase;
import MediatorPattern.colleague.Sale;
import MediatorPattern.colleague.Store;

public abstract class AbstractMediator {

	protected Purchase purchase;
	protected Sale sale;
	protected Store store;
	
	public abstract void execute(String str,Object...args);
	
	public void setPurchaseDepartment(Purchase purchase) {
		this.purchase = purchase;
	}
	
	public void setSaleDepartment(Sale sale) {
		this.sale = sale;
	}
	
	public void setStoreDepartment(Store store) {
		this.store = store;
	}
}

 

 

<!--StartFragment-->

具体中介者(Concrete Mediator) 角色: 具体中介者角色通过协调各同事角色实现协作行为, 因此它必须依赖于各个同事角色。

package MediatorPattern.mediator;


public class Mediator extends AbstractMediator{

	public void execute(String str,Object...args){
		if ("clearStock".equals(str)) {
			this.clearStock();
		}else if ("sell".equals(str)) {
			int number = (Integer) args[0];
			this.sell(number);
		}else if ("buy".equals(str)) {
			int number = (Integer) args[0];
			this.buy(number);
		}else if ("offSale".endsWith(str)) {
			this.offSale();
		}
	}
	
	private void clearStock(){
		purchase.refushBuy();
		int number = store.getStore();
		sale.sell(number);
	}
	
	private void sell(int number){
		System.out.println("销售部门销售:"+number);
		store.decrease(number);
		System.out.println("库存还有:"+store.getStore());
	}
	
	private void offSale(){
		System.out.println("销售部门折价销售");
	}
	
	private void buy(int number){
		int saleStatu = sale.getSaleStatus();
		if (saleStatu>80) {
			System.out.println("销售业绩好,采购部门购买:"+number);
			store.increase(number);
		}else {
			System.out.println("销售业绩不好,采购部门只采购一半购买:"+number/2);
			store.increase(number/2);
		}
		
		System.out.println("库存还有:"+store.getStore());
	}
	
}

 

 

<!--StartFragment-->

同事(Colleague) 角色: 每一个同事角色都知道中介者角色, 而且与其他的同事角色通信的时候, 一

定要通过中介者角色协作。 每个同事类的行为分为两种: 一种是同事本身的行为, 比如改变对象本身的状

态, 处理自己的行为等等, 这种方法叫做自发行为(Self-Method), 与其他的同事类或中介者没有任何的依

赖; 第二种是是必须依赖中介者才能完成的行为, 叫做依赖方法(Dep-Method)。

package MediatorPattern.colleague;

import MediatorPattern.mediator.AbstractMediator;

public abstract class AbstractColleague {
	
	protected AbstractMediator mediator;
	
	public abstract void setMediator(AbstractMediator mediator);
	
}

 

package MediatorPattern.colleague;

import MediatorPattern.mediator.AbstractMediator;

public class Purchase extends AbstractColleague{
	

	public void buy(int number){
		mediator.execute("buy",number);
	}
	
	public void refushBuy(){
		System.out.println("采购部门拒绝购买");
	}

	@Override
	public void setMediator(AbstractMediator mediator) {
		super.mediator = mediator;
		mediator.setPurchaseDepartment(this);
		
	}
}

 

package MediatorPattern.colleague;

import java.util.Random;

import MediatorPattern.mediator.AbstractMediator;

public class Sale extends AbstractColleague{
	
	@Override
	public void setMediator(AbstractMediator mediator) {
		super.mediator = mediator;
		mediator.setSaleDepartment(this);
		
	}

	public void sell(int number){
		mediator.execute("sell",number);
	}
	
	public int getSaleStatus(){
		Random random = new Random();
		int num = random.nextInt(100);
		System.out.println("销售情况:"+num);
		return num;
	}
	
	public void offSale(){ 
		mediator.execute("offSale");
	}
}

 

package MediatorPattern.colleague;

import MediatorPattern.mediator.AbstractMediator;

public class Store extends AbstractColleague{

	private int number = 100;
	
	@Override
	public void setMediator(AbstractMediator mediator) {
		super.mediator = mediator;
		mediator.setStoreDepartment(this);
		
	}
	
	public void increase(int num){
		System.out.println("库存增加:"+num);
		number = number + num;
	}
	
	public void decrease(int num){
		System.out.println("库存减少:"+num);
		number = number - num;
	}
	
	public void clearStock(){ 
		System.out.println("进行清仓大处理");
		mediator.execute("clearStock");
	}
	
	public int getStore(){
		return number;
	}
}

 

客户端调用:

package MediatorPattern;

import MediatorPattern.colleague.Purchase;
import MediatorPattern.colleague.Sale;
import MediatorPattern.colleague.Store;
import MediatorPattern.mediator.AbstractMediator;
import MediatorPattern.mediator.Mediator;

public class Client {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		AbstractMediator mediator = new Mediator();
		
		Purchase purchase = new Purchase();
		Store store = new Store();
		Sale sale = new Sale();
		
		purchase.setMediator(mediator);
		store.setMediator(mediator);
		sale.setMediator(mediator);
		
		purchase.buy(100);
		sale.sell(20);
		store.clearStock();

	}

}

 <!--EndFragment--><!--EndFragment--><!--EndFragment-->

分享到:
评论

相关推荐

    终结者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文件...

    局域网终结者1.0

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

    P2P终结者安装包

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

    p2p网络终结者4.7

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

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

    玩家可以通过与五子棋终结者的对局,理解其思考模式,从而提高自身的棋艺。 五子棋终结者2.0的出现,不仅展示了计算机在解决复杂策略问题上的能力,也推动了棋类游戏AI的发展。它为研究者提供了深入研究五子棋策略...

    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)三种加密模式,下面...

    P2P后台终结者源码

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

    反p2p终结者 反p2p终结者

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

    P2P终结者,只需解压即可

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

    终结者文件夹加密大师

    程序体积小巧,加密速度快,支持U盘/移动硬盘上面的文件夹加密,方便安全,终结者文件夹加密大师有简单/高级/Vista(Server2008)三种加密模式,下面分别做一下介绍: (a):简单加密模式:打开软件时默认使用简单模式...

    p2p终结者

    4. **隐藏模式**:为了防止被限速的设备发现并反制,P2P终结者还提供了隐蔽运行模式,使得控制端更加隐秘。 5. **易用性**:“Readme-说明.htm”文件提供了详细的使用指南,即便是对网络管理不熟悉的用户也能轻松...

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

    标题中的"P2P终结者-家庭版.rar"指的是一个针对家庭用户设计的P2P流量控制软件的压缩包文件。P2P(Peer-to-Peer)技术是一种网络通信模式,其中每个参与者既是服务的消费者也是服务的提供者,常见的应用如BitTorrent...

Global site tag (gtag.js) - Google Analytics