Java Technologies Strategy Design Pattern Example: Algorithm নির্বাচন এর জন্য Strategy Pattern গাইড ও নোট

390

Strategy Design Pattern হল একটি behavioral design pattern যা একটি এলগরিদমের পরিবারকে ডিফাইন করে এবং তাদের একটি ইন্টারফেসের মাধ্যমে সিলেক্ট করতে সক্ষম করে। এটি runtime এ এলগরিদম পরিবর্তন করতে সাহায্য করে এবং ক্লাসের মধ্যে এলগরিদমের উপযুক্ত ব্যবহার করা সম্ভব করে।

Strategy Pattern-এর মূল ধারণা হল, ক্লাসের মধ্যে আলাদা আলাদা এলগরিদম সংরক্ষণ করা এবং সেগুলি প্রয়োজনে runtime এ ব্যবহার করা। এই প্যাটার্নের মাধ্যমে, কোডের মধ্যে কোন hard-coded এলগরিদম বা লজিক থাকেনা এবং এটি আরও ফ্লেক্সিবল ও পরিবর্তনযোগ্য হয়ে ওঠে।

উদাহরণ: এলগরিদম নির্বাচন (Strategy Pattern)

ধরা যাক আমাদের একটি সফটওয়্যার সিস্টেম আছে যেখানে কিছু কনটেক্সটে ভিন্ন ভিন্ন এলগরিদম প্রয়োগ করা হয় (যেমন বিভিন্ন ক্যালকুলেশন বা ডিস্কাউন্ট ক্যালকুলেশন)। এখানে, Strategy Design Pattern ব্যবহার করা হবে।

১. Strategy Interface:

প্রথমে, আমরা একটি Strategy ইন্টারফেস তৈরি করবো যা বিভিন্ন এলগরিদমের জন্য কমন API ডিফাইন করবে।

public interface PaymentStrategy {
    void pay(int amount);
}

২. Concrete Strategies:

এবার আমরা PaymentStrategy ইন্টারফেসের মাধ্যমে বিভিন্ন এলগরিদম তৈরি করবো। যেমন, CreditCardPayment এবং PayPalPayment

// Credit Card Payment Strategy
public class CreditCardPayment implements PaymentStrategy {
    private String cardNumber;

    public CreditCardPayment(String cardNumber) {
        this.cardNumber = cardNumber;
    }

    @Override
    public void pay(int amount) {
        System.out.println("Paid " + amount + " using Credit Card: " + cardNumber);
    }
}

// PayPal Payment Strategy
public class PayPalPayment implements PaymentStrategy {
    private String email;

    public PayPalPayment(String email) {
        this.email = email;
    }

    @Override
    public void pay(int amount) {
        System.out.println("Paid " + amount + " using PayPal with email: " + email);
    }
}

৩. Context Class:

এখন আমরা একটি PaymentContext ক্লাস তৈরি করবো যা কোন পেমেন্ট স্ট্র্যাটেজি ব্যবহার করবে তা নির্বাচন করবে। এটি run-time এ পরিবর্তনশীল স্ট্র্যাটেজি ব্যবহার করতে পারে।

public class PaymentContext {
    private PaymentStrategy paymentStrategy;

    // পেমেন্ট স্ট্র্যাটেজি সেট করা
    public PaymentContext(PaymentStrategy paymentStrategy) {
        this.paymentStrategy = paymentStrategy;
    }

    // পেমেন্ট পদ্ধতি ব্যবহার করা
    public void executePayment(int amount) {
        paymentStrategy.pay(amount);
    }

    // স্ট্র্যাটেজি পরিবর্তন করা
    public void setPaymentStrategy(PaymentStrategy paymentStrategy) {
        this.paymentStrategy = paymentStrategy;
    }
}

৪. Client Code:

এবার আমরা ক্লায়েন্ট কোড তৈরি করবো যা বিভিন্ন পেমেন্ট স্ট্র্যাটেজি ব্যবহার করবে।

public class StrategyPatternExample {
    public static void main(String[] args) {
        // প্রথমে Credit Card পেমেন্ট স্ট্র্যাটেজি ব্যবহার করা হচ্ছে
        PaymentStrategy creditCardPayment = new CreditCardPayment("1234-5678-9876-5432");
        PaymentContext paymentContext = new PaymentContext(creditCardPayment);
        paymentContext.executePayment(500);

        // পেমেন্ট স্ট্র্যাটেজি পরিবর্তন করা হচ্ছে (PayPal)
        PaymentStrategy payPalPayment = new PayPalPayment("user@example.com");
        paymentContext.setPaymentStrategy(payPalPayment);
        paymentContext.executePayment(300);
    }
}

৫. আউটপুট:

Paid 500 using Credit Card: 1234-5678-9876-5432
Paid 300 using PayPal with email: user@example.com

ব্যাখ্যা:

  1. Strategy Interface (PaymentStrategy):
    • এটি একটি সাধারণ ইন্টারফেস যা pay মেথড ডিফাইন করে, যাতে বিভিন্ন ধরনের পেমেন্ট স্ট্র্যাটেজি এটির মাধ্যমে কাজ করতে পারে।
  2. Concrete Strategies (CreditCardPaymentPayPalPayment):
    • এই ক্লাসগুলি PaymentStrategy ইন্টারফেস ইমপ্লিমেন্ট করে এবং তাদের নিজস্ব পেমেন্ট এলগরিদম (ক্রেডিট কার্ড পেমেন্ট বা পেপ্যাল পেমেন্ট) বাস্তবায়ন করে।
  3. Context Class (PaymentContext):
    • এই ক্লাসটি ক্লায়েন্টের কাছে স্ট্র্যাটেজি সরবরাহ করে এবং সেই স্ট্র্যাটেজি অনুযায়ী পেমেন্ট পরিচালনা করে। এছাড়া, এটি স্ট্র্যাটেজি পরিবর্তনের সুবিধাও দেয়।
  4. Client Code (StrategyPatternExample):
    • এই কোডে আমরা PaymentContext ব্যবহার করি এবং পেমেন্ট স্ট্র্যাটেজি পরিবর্তন করে আলাদা আলাদা পেমেন্ট পদ্ধতি প্রয়োগ করি।

Strategy Design Pattern এর সুবিধা:

  1. ফ্লেক্সিবিলিটি: স্ট্র্যাটেজি পরিবর্তন করা সহজ এবং runtime এ ভিন্ন ভিন্ন এলগরিদম ব্যবহার করা সম্ভব।
  2. কোডের পুনঃব্যবহারযোগ্যতা: আলাদা আলাদা এলগরিদম তৈরি করা যাবে এবং একসাথে ব্যবহার করা যাবে।
  3. কোড সহজীকরণ: এলগরিদম পরিবর্তনের জন্য ক্লাস পরিবর্তন করতে হবে না, কেবল স্ট্র্যাটেজি পরিবর্তন করতে হবে।

এটি একটি সাধারণ Strategy Design Pattern এর উদাহরণ যা বিভিন্ন এলগরিদমকে encapsulate (অন্তর্ভুক্ত) করে এবং তাদের একসাথে ব্যবহার করার সুযোগ দেয়।

Content added By
Promotion

Are you sure to start over?

Loading...