State Pattern হল একটি Behavioral Design Pattern যা অবজেক্টের অভ্যন্তরীণ অবস্থা (state) পরিবর্তিত হওয়ার সাথে সাথে তার আচরণ পরিবর্তন করার কৌশল প্রদান করে। এই প্যাটার্নে, একটি অবজেক্টের অবস্থা পরিবর্তন হলে তার আচরণও পরিবর্তিত হয়ে যায়, যেটি state transitions এর মাধ্যমে পরিচালিত হয়।
State Pattern মূলত ব্যবহার করা হয় যখন একটি অবজেক্টের আচরণ তার অবস্থা অনুযায়ী পরিবর্তিত হয় এবং সেই অবস্থার মধ্যে যেকোনো একটিতে থাকা অবস্থায়, অবজেক্টটি বিভিন্ন আচরণ প্রদর্শন করতে পারে।
ধরা যাক, একটি TCP Connection সিস্টেম তৈরি করতে হবে যেখানে বিভিন্ন অবস্থা থাকে, যেমন Established, Closed, Listening। এই সিস্টেমে TCPConnection ক্লাসের অবস্থা পরিবর্তিত হলে তার আচরণও পরিবর্তিত হবে, যেমন Sending Data, Closing Connection, ইত্যাদি।
// State Interface
public interface TCPConnectionState {
void handle(TCPConnection connection);
}
// ConcreteState: Established State
public class EstablishedState implements TCPConnectionState {
@Override
public void handle(TCPConnection connection) {
System.out.println("Handling the Established state.");
// Transition to another state if needed
connection.setState(new ClosingState()); // Transition to Closing State
}
}
// ConcreteState: Closed State
public class ClosedState implements TCPConnectionState {
@Override
public void handle(TCPConnection connection) {
System.out.println("Handling the Closed state.");
// Transition to another state if needed
connection.setState(new ListeningState()); // Transition to Listening State
}
}
// ConcreteState: Listening State
public class ListeningState implements TCPConnectionState {
@Override
public void handle(TCPConnection connection) {
System.out.println("Handling the Listening state.");
// Transition to another state if needed
connection.setState(new EstablishedState()); // Transition to Established State
}
}
// Context Class
public class TCPConnection {
private TCPConnectionState state;
public TCPConnection() {
// Initially, set the state to Listening
this.state = new ListeningState();
}
// Set the current state
public void setState(TCPConnectionState state) {
this.state = state;
}
// Perform actions based on the current state
public void handleRequest() {
state.handle(this);
}
}
public class StatePatternExample {
public static void main(String[] args) {
// Create a TCPConnection object
TCPConnection connection = new TCPConnection();
// Handle requests, which will trigger state transitions
connection.handleRequest(); // Handling the Listening state.
connection.handleRequest(); // Handling the Established state.
connection.handleRequest(); // Handling the Closing state.
}
}
TCPConnectionState
একটি ইন্টারফেস যা সব ধরনের স্টেটের জন্য আচরণ সংজ্ঞায়িত করে।EstablishedState
, ClosedState
, এবং ListeningState
হল ConcreteState ক্লাস, যেখানে প্রতিটি স্টেটে handle()
মেথডের মাধ্যমে কার্যক্রম নির্ধারণ করা হয়।TCPConnection
ক্লাসটি বর্তমান অবস্থা সংরক্ষণ করে এবং handleRequest()
মেথডের মাধ্যমে সঠিক স্টেটের আচরণ ট্রিগার করে। স্টেট পরিবর্তন করার জন্য setState()
মেথড ব্যবহার করা হয়।State Pattern হল একটি Behavioral Design Pattern যা অবজেক্টের অভ্যন্তরীণ অবস্থার পরিবর্তনের সাথে সাথে তার আচরণ পরিবর্তন করতে সাহায্য করে। এটি স্টেট পরিবর্তনের জন্য অবজেক্টের আচরণ পরিবর্তন করে এবং স্টেটের অবস্থা অনুযায়ী সঠিক কর্মপদ্ধতি গ্রহণ করে। এটি কোডের রক্ষণাবেক্ষণ এবং এক্সটেনশন সহজ করে, কারণ নতুন স্টেটগুলি সরাসরি যুক্ত করা যায় এবং পুরনো কোডে কমপ্লেক্সিটি বৃদ্ধি না করে। State Pattern বিশেষভাবে উপযোগী যেখানে অবজেক্টের অনেকগুলি অবস্থার মধ্যে আচরণ পরিবর্তন করতে হয়।
Read more