责任链模式 – “偶像”塌房
首先定义一个塌房事件
public class SurpriseEvent {
public SurpriseEvent(String topic, String partyConcerned, String company) {
this.topic = topic;
this.partyConcerned = partyConcerned;
this.company = company;
}
/**
* 塌房主题
*/
private String topic;
/**
* 当事人
*/
private String partyConcerned;
/**
* “偶像”工作单位
*/
private String company;
// Getter Setter ...
}
定义发布事件的声明方抽象类
public abstract class StatementIssuer {
/**
* 下一个发布声明的人
*/
protected StatementIssuer nextStatementIssuer;
public void setNextIssuer(StatementIssuer statementIssuer) {
this.nextStatementIssuer = statementIssuer;
}
/**
* 针对 surpriseEvent 发布具体声明
*/
public abstract void publish(SurpriseEvent surpriseEvent);
}
idol
public class Idol extends StatementIssuer {
@Override
public void publish(SurpriseEvent surpriseEvent) {
System.out.println("idol: 很抱歉占用公共资源,我为我的事情向大家道歉...\n");
if (nextStatementIssuer != null) {
nextStatementIssuer.publish(surpriseEvent);
}
}
}
经纪公司
public class BrokerageAgency extends StatementIssuer {
@Override
public void publish(SurpriseEvent surpriseEvent) {
System.out.println("公司声明:\n" +
"近日,在网络上流传的关于我司"
+ surpriseEvent.getPartyConcerned()
+ "的" + surpriseEvent.getTopic() + "事情纯属谣言...\n" + ""
+ surpriseEvent.getCompany() + "公司\n" +
"xxxx年xx月xx日");
if (nextStatementIssuer != null) {
nextStatementIssuer.publish(surpriseEvent);
}
}
}
测试类
public class Test {
public static void main(String[] args) {
SurpriseEvent surpriseEvent = new SurpriseEvent("456", "A", "哕哗");
Idol idol = new Idol();
BrokerageAgency brokerageAgency = new BrokerageAgency();
idol.setNextIssuer(brokerageAgency);
idol.publish(surpriseEvent);
}
}
运行结果
idol: 很抱歉占用公共资源,我为我的事情向大家道歉...
公司声明:
近日,在网络上流传的关于我司A的456事情纯属谣言...
哕哗公司
xxxx年xx月xx日