Design Patterns এ Tuple এর বাস্তব প্রয়োগ

Tuples এবং Design Patterns - জাভা টাপল (Java Tuples) - Java Technologies

371

Tuples হলো একাধিক ডেটা টাইপ একত্রে সংরক্ষণের জন্য একটি সাধারণ ডেটা স্ট্রাকচার। Design Patterns এ Tuples ব্যবহারের মাধ্যমে কোডকে আরও রিডেবল, সংক্ষিপ্ত এবং কার্যকর করা যায়। Java-এর বিভিন্ন Design Patterns, যেমন Observer, Command, এবং Factory, Tuples এর সাহায্যে আরও সহজে ইমপ্লিমেন্ট করা যায়।


Observer Pattern এ Tuple এর Integration

Observer Pattern কী?

  • Observer Pattern একটি Behavioral Pattern, যেখানে একটি অবজেক্টের অবস্থা পরিবর্তন হলে সংশ্লিষ্ট অবজেক্টগুলোকে স্বয়ংক্রিয়ভাবে অবহিত করা হয়।
  • Tuples ব্যবহার করে state changes এবং notifications সহজ করা যায়।

Example: Tuple দিয়ে State এবং Observers হ্যান্ডলিং

Step 1: Define Observer এবং Observable

import io.vavr.Tuple;
import io.vavr.Tuple2;

import java.util.ArrayList;
import java.util.List;

interface Observer {
    void update(Tuple2<String, Integer> state);
}

class Observable {
    private final List<Observer> observers = new ArrayList<>();
    private Tuple2<String, Integer> state;

    public void addObserver(Observer observer) {
        observers.add(observer);
    }

    public void setState(String name, int value) {
        this.state = Tuple.of(name, value);
        notifyObservers();
    }

    private void notifyObservers() {
        for (Observer observer : observers) {
            observer.update(state);
        }
    }
}

Step 2: Implement Observer

class ConcreteObserver implements Observer {
    private final String observerName;

    public ConcreteObserver(String observerName) {
        this.observerName = observerName;
    }

    @Override
    public void update(Tuple2<String, Integer> state) {
        System.out.println(observerName + " received update: " + state._1 + " -> " + state._2);
    }
}

Step 3: Use the Pattern

public class ObserverPatternExample {
    public static void main(String[] args) {
        Observable observable = new Observable();

        Observer observer1 = new ConcreteObserver("Observer 1");
        Observer observer2 = new ConcreteObserver("Observer 2");

        observable.addObserver(observer1);
        observable.addObserver(observer2);

        observable.setState("Temperature", 25);
        observable.setState("Humidity", 60);
    }
}

Output:

Observer 1 received update: Temperature -> 25
Observer 2 received update: Temperature -> 25
Observer 1 received update: Humidity -> 60
Observer 2 received update: Humidity -> 60

Command Pattern এ Tuple এর Integration

Command Pattern কী?

  • Command Pattern একটি Behavioral Pattern, যেখানে একটি অনুরোধ বা অপারেশন একটি অবজেক্ট হিসেবে প্যাকেজ করা হয় এবং প্রয়োজনমতো চালানো হয়।
  • Tuples ব্যবহার করে Command Parameters এবং Results পরিচালনা সহজ হয়।

Example: Tuple দিয়ে Commands এবং Parameters পরিচালনা

Step 1: Define Command Interface

import io.vavr.Tuple2;

interface Command {
    Tuple2<String, Integer> execute(Tuple2<Integer, Integer> params);
}

Step 2: Implement Concrete Commands

class AddCommand implements Command {
    @Override
    public Tuple2<String, Integer> execute(Tuple2<Integer, Integer> params) {
        int result = params._1 + params._2;
        return Tuple2.of("Addition", result);
    }
}

class MultiplyCommand implements Command {
    @Override
    public Tuple2<String, Integer> execute(Tuple2<Integer, Integer> params) {
        int result = params._1 * params._2;
        return Tuple2.of("Multiplication", result);
    }
}

Step 3: Use the Command Pattern

public class CommandPatternExample {
    public static void main(String[] args) {
        Command addCommand = new AddCommand();
        Command multiplyCommand = new MultiplyCommand();

        Tuple2<Integer, Integer> params = Tuple2.of(10, 20);

        Tuple2<String, Integer> addResult = addCommand.execute(params);
        Tuple2<String, Integer> multiplyResult = multiplyCommand.execute(params);

        System.out.println(addResult._1 + ": " + addResult._2);
        System.out.println(multiplyResult._1 + ": " + multiplyResult._2);
    }
}

Output:

Addition: 30
Multiplication: 200

Factory Pattern এ Tuple এর Integration

Factory Pattern কী?

  • Factory Pattern একটি Creational Pattern, যা অবজেক্ট তৈরির জন্য একটি ইন্টারফেস প্রদান করে।
  • Tuples ব্যবহার করে বিভিন্ন প্রকারের অবজেক্ট তৈরি সহজ হয়।

Example: Tuple দিয়ে Object Creation Management

Step 1: Define Product Interface

interface Shape {
    void draw();
}

Step 2: Implement Concrete Products

class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a Circle");
    }
}

class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a Rectangle");
    }
}

Step 3: Implement Factory

import io.vavr.Tuple2;

class ShapeFactory {
    public static Shape getShape(Tuple2<String, Integer> params) {
        return switch (params._1.toLowerCase()) {
            case "circle" -> new Circle();
            case "rectangle" -> new Rectangle();
            default -> throw new IllegalArgumentException("Unknown Shape");
        };
    }
}

Step 4: Use the Factory

public class FactoryPatternExample {
    public static void main(String[] args) {
        Tuple2<String, Integer> circleParams = Tuple2.of("circle", 0);
        Tuple2<String, Integer> rectangleParams = Tuple2.of("rectangle", 0);

        Shape circle = ShapeFactory.getShape(circleParams);
        Shape rectangle = ShapeFactory.getShape(rectangleParams);

        circle.draw();
        rectangle.draw();
    }
}

Output:

Drawing a Circle
Drawing a Rectangle

Tuples এর সুবিধা Design Patterns এ

  1. Parameter Management: Tuples একাধিক প্যারামিটারকে একটি অবজেক্ট হিসেবে পাস করতে সাহায্য করে।
  2. Compact Code: Tuples ব্যবহার করলে কোড সংক্ষিপ্ত এবং রিডেবল হয়।
  3. Immutable Data Handling: Tuples Immutable হওয়ায় ডেটা নিরাপদ এবং কার্যকর।
  4. Dynamic Data Storage: বিভিন্ন টাইপের ডেটা একই স্থানে সংরক্ষণ করা যায়।

Tuples এর সীমাবদ্ধতা Design Patterns এ

  1. Field Names: Tuples-এর _1, _2 ইত্যাদি ফিল্ড নামহীন হওয়ায় কোড কম রিডেবল।
  2. Complex Objects: বড় বা জটিল ডেটার ক্ষেত্রে POJO বা Record বেশি কার্যকর।
  3. Library Dependency: Tuples এর জন্য Vavr বা Apache Commons-এর মতো তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করতে হয়।

Tuples Design Patterns, যেমন Observer, Command, এবং Factory, এ ব্যবহার করলে:

  • Cleaner Code: কোড কমপ্যাক্ট এবং সহজ হয়।
  • Efficient Parameter Passing: প্যারামিটার ম্যানেজমেন্ট কার্যকর হয়।
  • Dynamic Data Handling: জটিল ডেটা ম্যানিপুলেশন সহজ হয়।

Best Practice: ছোট এবং সাধারণ কাজের জন্য Tuples ব্যবহার করুন, এবং জটিল ডেটার জন্য POJO বা Record ব্যবহার করুন।

Content added By
Promotion

Are you sure to start over?

Loading...