设计23式—中介

/*
 * 中介者模式
 * 优点
 * 减少类间的依赖
 * 缺点
 * 关联的对象越多逻辑越复杂,中介类越膨胀
 */
public class MyMain {

	public static void main(String[] args) {
		// 实例一个中介
		AbstractInterMediary mediary = new InterMediary();
		// 实例一个老一的买房者
		BuyHouseMan buyHouseMan = new BuyHouseMan(mediary);
		buyHouseMan.setName("老一");
		// 实例一个老二卖房者
		SellHouseMan sellHouseMan = new SellHouseMan(mediary);
		sellHouseMan.setName("老二");
		// 买房者要求购买房价8000
		buyHouseMan.setNumber(8000);
		// 委托中介
		buyHouseMan.mediary.execute("BuyHouse", buyHouseMan);
		// 卖房者要求购买房价9000
		sellHouseMan.setNumber(9000);
		// 委托中介
		sellHouseMan.mediary.execute("SellHouse", sellHouseMan);
		// 实例一个老三的买房者
		BuyHouseMan buyHouseMan2 = new BuyHouseMan(mediary);
		buyHouseMan2.setName("老三");
		// 买房者要求购买房价10000
		buyHouseMan2.setNumber(10000);
		// 委托中介
		buyHouseMan2.mediary.execute("BuyHouse", buyHouseMan2);
		// 实例一个老四卖房者
		SellHouseMan sellHouseMan2 = new SellHouseMan(mediary);
	    sellHouseMan2.setName("老四");
	    // 卖房者要求购买房价10000
	    sellHouseMan2.setNumber(10000);
	    // 委托中介
	    sellHouseMan2.mediary.execute("SellHouse",sellHouseMan2);		
	}

}

// 抽象房中介
abstract class AbstractInterMediary {
	// 购房角色
	protected BuyHouseMan buyHouseMan;
	// 卖房角色
	protected SellHouseMan sellHouseMan;
	// 手头买房者资源
	ArrayList<BuyHouseMan> buyHouseManList = new ArrayList<>();
	// 手头卖房者资源
	ArrayList<SellHouseMan> sellHouseManList = new ArrayList<>();

	public AbstractInterMediary() {
		buyHouseMan = new BuyHouseMan(this);
		sellHouseMan = new SellHouseMan(this);
	}

	// 中介者最重要的方法叫做事件方法,处理多个对象之间的关系(交易)
	public abstract void execute(String str, Object... objects);
}

// 抽象交易角色
abstract class AbstractColleague {
	// 交易角色姓名
	private String name = "匿名";
	// 价格(买房/卖房)
	private int number = 0;
	protected AbstractInterMediary mediary;

	public AbstractColleague(AbstractInterMediary mediary) {
		this.mediary = mediary;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getNumber() {
		return number;
	}

	public void setNumber(int number) {
		this.number = number;
	}
}

// 具体的交易角色购房者
class BuyHouseMan extends AbstractColleague {
	public BuyHouseMan(AbstractInterMediary mediary) {
		super(mediary);
	}
}

// 具体的交易角色卖房者
class SellHouseMan extends AbstractColleague {
	public SellHouseMan(AbstractInterMediary mediary) {
		super(mediary);
	}
}

// 具体的房中介
class InterMediary extends AbstractInterMediary {
	

	// 初始化资源
	public InterMediary() {
		for (int i = 0; i < 10; i++) {
			BuyHouseMan buyHouseMan = new BuyHouseMan(this);
			buyHouseMan.setName("买房" + i + "号");
			buyHouseMan.setNumber(i * 1000);
			buyHouseManList.add(buyHouseMan);
			SellHouseMan sellHouseMan = new SellHouseMan(this);
			sellHouseMan.setName("卖房" + i + "号");
			sellHouseMan.setNumber(i * 1000);
			sellHouseManList.add(sellHouseMan);
		}
	}

	// 交易
	@Override
	public void execute(String str, Object... objects) {
		if (str.equals("BuyHouse"))// 买房
			this.buyHouse((BuyHouseMan) objects[0]);
		else if (str.equals("SellHouse")) // 卖房
			this.sellHouse((SellHouseMan) objects[0]);

	}

	// 买房交易
	private void buyHouse(BuyHouseMan buyHouseMan) {
		System.out.println("中介:有买房者" + buyHouseMan.getName() + ",要求买房价:" + buyHouseMan.getNumber() + ",寻找手头上匹配的卖方者");
		for (int i = 0; i < sellHouseManList.size(); i++) {
			if (sellHouseManList.get(i).getNumber() == buyHouseMan.getNumber()) {
				System.out.println("找到卖房者:" + sellHouseManList.get(i).getName() + ",正好在卖价值" + buyHouseMan.getNumber()
						+ "的房,交易达成。移除手头该资源");
				sellHouseManList.remove(i);
				System.out.println("---------------------");
				break;
			}
			if (i == sellHouseManList.size() - 1) {
				System.out.println("手头上没有该价值的卖房者,将买房者信息加入手头资源");
				buyHouseManList.add(buyHouseMan);
				System.out.println("---------------------");
				break;
			}
		}
	}

	// 卖房交易
	private void sellHouse(SellHouseMan sellHouseMan) {
		System.out.println("中介:有卖房者" + sellHouseMan.getName() + ",要求卖房价:" + sellHouseMan.getNumber() + ",寻找手头上匹配的卖方者");
		for (int i = 0; i < buyHouseManList.size(); i++) {
			if (buyHouseManList.get(i).getNumber() == sellHouseMan.getNumber()) {
				System.out.println("找到买房者:" + buyHouseManList.get(i).getName() + ",正好在买价值" + sellHouseMan.getNumber()
						+ "的房,交易达成。移除手头该资源");
				buyHouseManList.remove(i);
				System.out.println("---------------------");
				break;
			}
			if (i == buyHouseManList.size() - 1) {
				System.out.println("手头上没有该价值的卖房者,将买房者信息加入手头资源");
				sellHouseManList.add(sellHouseMan);
				System.out.println("---------------------");
				break;
			}
		}
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值