package org.example.chainofresponsibility;
public class Main {
public static void main(String[] args)
{
Handler handler1 = new ConcreteHandler1();
Handler handler2 = new ConcreteHandler2();
handler1.setNext(handler2);
Question question = new Question(1);
handler1.request(question);
}
}
Chain of Responsibilityは処理を行う人(Handler)を数珠つなぎに配列しておき、リクエスト(Question)に対して先頭のHandlerから処理が可能かどうかを判定(judge)し、処理できない物であれば後ろのHandlerにまる投げする、という仕組みです。
package org.example.proxy;
public class RealSubject implements Subject {
@Override
public void request1() {
// 時間のかかる処理
}
@Override
public void request2() {
// 時間のかかる処理
}
}
package org.example.proxy;
public class Proxy implements Subject{
private RealSubject real;
@Override
public synchronized void request1() {
realize();
real.request1();
}
@Override
public synchronized void request2() {
realize();
real.request2();
}
private void realize() {
if(real == null) {
real = new RealSubject();
}
}
}
package org.example.proxy;
public class Main {
public static void main(String[] args) {
Subject subject = new Proxy();
subject.request1();
subject.request2();
}
}