中介者模式小试(二)

2014-11-23 22:54:41 · 作者: · 浏览: 1
ic void findCustomerAndSendProducts(Order order) {
System.out.println("我是送货员,货物到达" + order.getAddress());
noticeDangdang(this);
}
}
复制代码
7、然后就是最重要的中介者类——当当网:
复制代码
import java.util.LinkedList;
//中介者类为单例
public class Dangdang {
private static Dangdang instance = new Dangdang();
// 一个同步的订单列表,这里真正实现时,应该为数据库中取出
public LinkedList orderList = new LinkedList();
public static Dangdang getInstance() {
return instance;
}
public void addOrderToList(Order order) {
orderList.push(order);
}
private Order getOrderFromList() {
return orderList.poll();
}
public void executeNotice(Notice notice) {
// 如果通知类是顾客
if (notice.getClass() == Customer.class) {
System.out.println("通知:已收到订单!开始处理订单!");
// 从顾客手中取得订单
Order order = ((Customer) notice).getOrder();
// 开始处理订单
executeOrder(order);
}
// 如果通知类是取货中心
if (notice.getClass() == GetProductsCenter.class) {
// 开始送货流程
System.out.println("通知:取货成功,开始送货流程!");
}
// 如果通知类是送货中心
if (notice.getClass() == SendProductsCenter.class) {
System.out.println("通知:分配送货人完毕,送货人开始送货!");
}
if (notice.getClass() == DeliveryMan.class) {
System.out.println("通知:送货员货已送到!");
}
}
// 处理订单流程
public void executeOrder(Order order) {
// 增加订单到订单列表
addOrderToList(order);
beginToSend();
}
// 开始送货
public void beginToSend() {
// 从订单列表取得订单
Order order = getOrderFromList();
// 取货中心去取货
GetProductsCenter.getInstance().getProduct(order);
// 送货中心去送货
SendProductsCenter.getInstance().sendProducts(order);
}
}
复制代码
8、我们来测试一下:
复制代码
public class Test {
public static void main(String[] args) {
//创建顾客类
Customer customer = new Customer();
//创建订单
Order order = new Order();
order.setAddress("广东省 广州市 XX路 XX号");
order.setPersonInfomation("XXXXX的个人信息");
order.setProductList("《程序员的自我修养》、《C++ Primer》");
customer.sendOrder(order);
}
}
复制代码
9、结果如下:
通知:已收到订单!开始处理订单!
从仓库取得《程序员的自我修养》、《C++ Primer》
通知:取货成功,开始送货流程!
通知:分配送货人完毕,送货人开始送货!
我是送货员,货物到达广东省 广州市 XX路 XX号
通知:送货员货已送到!
三、解决多对多问题:
《研磨设计模式》在介绍中介者模式的时候,提出了一种用中介者模式解决数据多对多数据耦合的问题。
部门类Dep和人员类User,一个部门可以有多个人员,同样,一个人员可以属于多个部门。
而面对几种情况:1、部门被撤销 2、部门合并 3、人员离职 4、人员换部门
应该怎样处理呢?如果简单的用两个一对多的实体类来表示Dep和User,那就功能的实现就太复杂了。
1、首先定义部门类:
复制代码
public class Dep {
private String depId;
private String depName;
public String getDepId() {
return depId;
}
public void setDepId(String depId) {
this.depId = depId;
}
public String getDepName() {
return depName;
}
public void setDepName(String depName) {
this.depName = depName;
}
//删除本部门,调用中介类处理
public boolean deleteDep(){
DepUserMediatorImpl mediator= DepUserMediatorImpl.getInstance();
mediator.deleteDep(depId);