设计23式—中介

来源:互联网 发布:淘宝直通车怎么关闭 编辑:程序博客网 时间:2024/05/24 05:53
/* * 中介者模式 * 优点 * 减少类间的依赖 * 缺点 * 关联的对象越多逻辑越复杂,中介类越膨胀 */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("老二");// 买房者要求购买房价8000buyHouseMan.setNumber(8000);// 委托中介buyHouseMan.mediary.execute("BuyHouse", buyHouseMan);// 卖房者要求购买房价9000sellHouseMan.setNumber(9000);// 委托中介sellHouseMan.mediary.execute("SellHouse", sellHouseMan);// 实例一个老三的买房者BuyHouseMan buyHouseMan2 = new BuyHouseMan(mediary);buyHouseMan2.setName("老三");// 买房者要求购买房价10000buyHouseMan2.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);}}// 交易@Overridepublic 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;}}}}