Chain Of Responsibility Design Pattern ঃ 

এই ডিজাইন প্যাটার্ন  একটা চেইন এ কাজ করে থাকে। যেমন , আমাদের প্র্যত্যহিক জীবনে আমরা অনেক সমস্যার মুখমুখি হই , একটা সমস্যা একজন সমাধান না করতে পারলে সেটা আর একজনের কাছে যাবে, আবার সে না করতে পারলে আর একজনের কাছে যাবে এমন। এখানে একটা চেইন মেইন টেইন করতেছে । 


আবার এমন একটা সফটওয়ার এর কথা ভাবি , যার মাদ্ধমে আমরা পেমেন্ট করে থাকি । এখন এই পেমেন্ট এর পরিমানের উপর নির্ভর করবে এটা কোন মাদ্ধমে পেমেন্ট হবে । যেমন ৫০০ টাকার নিচে অথবা সমান যদি পরিমান থাকে তাহলে ব্যাংক এর মাদ্ধমে পেমেন্ট হবে , ১০০০ এর নিচে যদি হয় তাহলে কার্ড এর মাদ্ধমে হবে , এবং ১৫০০ এর নিচে হলে পেপাল এর মাদ্ধমে পেমেন্ট সম্পন্ন হবে । 


এই সমস্যা টা আমরা চেইন অব রেস্পসিবিলিটি এর মাদ্ধমে সমাধান কর‍ব । 





public abstract class PaymentHandler {

    protected PaymentHandler next;
    public void setNext(PaymentHandler next){this.next = next;}

    public abstract void handlePayment(double amount);
}


Now....


public class BankPaymentHandler extends PaymentHandler{

    @Override
    public void handlePayment(double amount) {
        if(amount <=500){
            System.out.println("Paid using bank account : $"+amount);
        }else{
            next.handlePayment(amount);
        }
    }
}

------


public class CreditCardPaymentHandler extends PaymentHandler{
    @Override
    public void handlePayment(double amount) {
        if(amount <=1000){
            System.out.println("Paid using credit card : $"+amount);
        }else{
            next.handlePayment(amount);
        }
    }
}

---


public class PaypalPaymentHandler extends PaymentHandler{
    @Override
    public void handlePayment(double amount) {
        if(amount <=1500){
            System.out.println("Paid using  paypal : $"+amount);
        }else{
            next.handlePayment(amount);
        }
    }
}


Main Class


public class ChainOfReponsibilityApplication {

    public static void main(String[] args) {

        PaymentHandler bank = new BankPaymentHandler();
        PaymentHandler creditCard = new CreditCardPaymentHandler();
        PaymentHandler paypal = new PaypalPaymentHandler();
        bank.setNext(creditCard);
        creditCard.setNext(paypal);


        bank.handlePayment(600);
        creditCard.handlePayment(200);
        bank.handlePayment(1200);
        bank.handlePayment(600);
    }
}