package com.ObServerPattern;
public class Event {
//事件类型
public String EventType;
//事件源
public Object EventResource;
//事件结果
public String EventResult;
//事件名称
public String EventName;
}
package com.ObServerPattern;
public class Order {
//订单号
public String OrderNum;
//价格
public double Price;
}
package com.ObServerPattern;
import java.util.ArrayList;
import java.util.List;
public abstract class AbstractObServable {
//对象集合
protected List list = new ArrayList<>();
//添加对象
public void Add(AbstractObServer sendService)
{
list.add(sendService);
}
//发送
protected void Send(Event event)
{
list.forEach(o ->{
o.Send(event);
});
}
public void Pay(Order order){}
public void Refund(){}
}
package com.ObServerPattern;
import java.util.ArrayList;
import java.util.List;
public class PayService extends AbstractObServable {
/*
* 订单支付
* */
@Override
public void Pay(Order order)
{
Event event = new Event();
event.EventName = "Pay";
event.EventResource = "PayService";
event.EventResult = "支付成功";
event.EventType = "Pay";
System.out.println("订单号\t价格");
System.out.println(order.OrderNum+"\t\t"+order.Price); //发送信息
Send(event);
}
}
package com.ObServerPattern;
public abstract class AbstractObServer {
public abstract void Send (Event event);
}
package com.ObServerPattern;
public class EmailService extends AbstractObServer {
/*
* 发送邮件
* */
@Override
public void Send(Event event)
{
if ("Pay".equals(event.EventType))
{
System.out.println("支付邮件发送成功!");
}
else if ("Refund".equals(event.EventType))
{
System.out.println("退款邮件发送成功!");
}
}
}
package com.ObServerPattern;
public class SMService extends AbstractObServer {
/*
* 短信发送
* */
@Override
public void Send(Event event)
{
if ("Pay".equals(event.EventType))
{
System.out.println("支付短信发送成功!");
}
else if ("Refund".equals(event.EventType))
{
System.out.println("退款短信发送成功!");
}
}
}
package com.ObServerPattern;
public class RefundService extends AbstractObServable {
@Override
public void Refund() {
Event event = new Event();
event.EventName = "Refund";
event.EventResource = "RefundService";
event.EventResult = "退款成功";
event.EventType = "Refund";
Send(event);
}
}
Order order= new Order();
order.OrderNum="123";
order.Price = 213;
AbstractObServable payService= new PayService();
payService.Add(new EmailService());
payService.Add(new SMService());
payService.Pay(order);
AbstractObServable refundService= new RefundService();
refundService.Add(new EmailService());
refundService.Add(new SMService());
refundService.Refund();