提交 8a75c0b8 编写于 作者: E ex_kongxiang

feat(中介者模式):create

上级 dc087054
package com.kongxiang.raindrop.dp.type.behavior.mediator;
/**
* @author 孔翔
* @since 2023-10-19
* copyright for author : 孔翔 at 2023-10-19
* dp
*/
public class Bank {
// 信用验证
public boolean checkCredit(String user) {
if ("zhangsan".equals(user)) {
return true;
}
throw new IllegalArgumentException("买家信用不够");
}
public void dealMoney(Buyer buyer, Homer homer) {
homer.money += homer.home.price;
buyer.money -= homer.home.price;
}
}
package com.kongxiang.raindrop.dp.type.behavior.mediator;
/**
* @author 孔翔
* @since 2023-10-19
* copyright for author : 孔翔 at 2023-10-19
* dp
*/
public class Buyer {
/**
* 姓名
*/
public String name;
/**
* 拥有的金钱
*/
public int money;
public Home home;
public Buyer(String name, int money) {
this.money = money;
this.name = name;
}
public void buyHome(Mediator mediator) throws Exception {
Homer homer = mediator.findHomer();
mediator.checkCredit(this);
mediator.checkMoney(this.money, homer.home.price);
mediator.deal(this, homer);
}
}
package com.kongxiang.raindrop.dp.type.behavior.mediator;
import lombok.ToString;
/**
* @author 孔翔
* @since 2023-10-19
* copyright for author : 孔翔 at 2023-10-19
* dp
*/
@ToString
public class Home {
// 户主
public String master;
// 价格
public int price;
public Home(String master, int price) {
this.master = master;
this.price = price;
}
}
package com.kongxiang.raindrop.dp.type.behavior.mediator;
import java.util.HashMap;
import java.util.Map;
/**
* @author 孔翔
* @since 2023-10-19
* copyright for author : 孔翔 at 2023-10-19
* dp
*/
public class HomeRegister {
private Map<String, Home> register = new HashMap<>();
/**
* 办理房产证,注册房源信息
*
* @param name
* @param home
*/
public void register(String name, Home home) {
register.put(name, home);
}
/**
* 交易
*
* @param buyer
* @param homer
* @throws Exception
*/
public void deal(Buyer buyer, Homer homer) throws Exception {
Home home = register.get(homer.name);
if (home == null) {
throw new Exception("卖家没有登记的房源 " + homer.name);
}
if (homer.home != home) {
throw new Exception("卖家登记的房源和买卖的不一致 " + homer.name);
}
Home remove = register.remove(homer.name);
register.put(buyer.name, remove);
buyer.home = homer.home;
homer.home = null;
buyer.home.master = buyer.name;
}
/**
* 房源是否存在
*
* @param name
* @param home
* @return
*/
public boolean homeExist(String name, Home home) {
Home home1 = register.get(name);
if (home1 == home) {
return true;
}
return false;
}
}
package com.kongxiang.raindrop.dp.type.behavior.mediator;
import lombok.ToString;
/**
* @author 孔翔
* @since 2023-10-19
* copyright for author : 孔翔 at 2023-10-19
* dp
*/
@ToString
public class Homer {
public String name;
public Home home;
public int money;
public Homer(String name, Home home) {
this.name = name;
this.home = home;
}
}
package com.kongxiang.raindrop.dp.type.behavior.mediator;
/**
* @author 孔翔
* @since 2023-10-19
* copyright for author : 孔翔 at 2023-10-19
* dp
*/
public class Main {
public static void main(String[] args) throws Exception {
HomeRegister homeRegister = new HomeRegister();
Mediator m = new Mediator(homeRegister);
Bank bank = new Bank();
m.setBank(bank);
String homerName = "lisi";
Home home = new Home(homerName,100000);
homeRegister.register(homerName,home);
Homer homer = new Homer(homerName,home);
// 申请卖房
m.registerHomer(homer);
// 买房流程
String buyerName = "zhangsan";
Buyer buyer = new Buyer(buyerName,2000);
System.out.println("买家买了房子 :买家" + buyer.name + " 房子"+ buyer.home +" 余额"+buyer.money);
System.out.println("卖家卖了房子 :卖家" + homer.name + " 房子"+ homer.home +" 余额"+homer.money);
System.out.println("买房前");
buyer.buyHome(m);
System.out.println("买家买了房子 :买家" + buyer.name + " 房子"+ buyer.home +" 余额"+buyer.money);
System.out.println("卖家卖了房子 :卖家" + homer.name + " 房子"+ homer.home +" 余额"+homer.money);
}
}
package com.kongxiang.raindrop.dp.type.behavior.mediator;
/**
* @author 孔翔
* @since 2023-10-19
* copyright for author : 孔翔 at 2023-10-19
* dp
*/
public class Mediator {
private HomeRegister homeRegister;
Bank bank;
public Mediator(HomeRegister aHomeRegister) {
this.homeRegister = aHomeRegister;
}
public void setBank(Bank bank) {
this.bank = bank;
}
/**
* 卖房者
*/
private Homer homer;
public void registerHomer(Homer homer) {
if (null != homer.home) {
}
this.homer = homer;
}
public Homer findHomer() {
return homer;
}
public boolean checkCredit(Buyer buyer) throws Exception {
return bank.checkCredit(buyer.name);
}
public void checkMoney(int money, int price) {
if (money <= price){
throw new IllegalArgumentException("买家金额不够");
}
}
/**
* 交易
* @param buyer
* @param homer
*/
public void deal(Buyer buyer, Homer homer) throws Exception {
bank.dealMoney(buyer,homer);
homeRegister.deal(buyer,homer);
}
}
package com.kongxiang.raindrop.dp.type.behavior.observer.pubsub;
import com.kongxiang.raindrop.dp.type.behavior.observer.Observer;
import java.util.ArrayList;
import java.util.List;
/**
* @author 孔翔
* @since 2023-10-19
* copyright for author : 孔翔 at 2023-10-19
* dp
*/
public class Dispatcher {
/**
* 维护观察者的列表
*/
protected List<Observer> observerList = new ArrayList<>();
/**
* 增加一个观察者
*/
public void register(Observer observer) {
observerList.add(observer);
}
/**
* 移除一个观察者
*/
public void remove(Observer observer) {
observerList.remove(observer);
}
/**
* 通知方法
*/
public void notifyAllObserver() {
observerList.forEach((o) -> o.update(this));
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册