State Pattern কি?
State Pattern হল একটি Behavioral Design Pattern যা অবজেক্টের অভ্যন্তরীণ অবস্থা (state) পরিবর্তিত হওয়ার সাথে সাথে তার আচরণ পরিবর্তন করার কৌশল প্রদান করে। এই প্যাটার্নে, একটি অবজেক্টের অবস্থা পরিবর্তন হলে তার আচরণও পরিবর্তিত হয়ে যায়, যেটি state transitions এর মাধ্যমে পরিচালিত হয়।
State Pattern মূলত ব্যবহার করা হয় যখন একটি অবজেক্টের আচরণ তার অবস্থা অনুযায়ী পরিবর্তিত হয় এবং সেই অবস্থার মধ্যে যেকোনো একটিতে থাকা অবস্থায়, অবজেক্টটি বিভিন্ন আচরণ প্রদর্শন করতে পারে।
State Pattern এর উপাদান:
- Context: এটি একটি ক্লাস যা বর্তমান অবস্থা (state) ধারণ করে এবং সঠিক আচরণে ট্রানজিশন করার জন্য স্টেট অবজেক্টের সাথে কাজ করে।
- State: এটি একটি ইন্টারফেস বা অ্যাবস্ট্রাক্ট ক্লাস যা বর্তমান অবস্থার জন্য সংজ্ঞায়িত আচরণ নির্ধারণ করে।
- ConcreteState: এটি State ইন্টারফেস বা ক্লাসের কনক্রিট বাস্তবায়ন যেখানে বর্তমান অবস্থার জন্য সঠিক আচরণগুলি সংজ্ঞায়িত করা হয়।
State Pattern এর উদাহরণ
ধরা যাক, একটি TCP Connection সিস্টেম তৈরি করতে হবে যেখানে বিভিন্ন অবস্থা থাকে, যেমন Established, Closed, Listening। এই সিস্টেমে TCPConnection ক্লাসের অবস্থা পরিবর্তিত হলে তার আচরণও পরিবর্তিত হবে, যেমন Sending Data, Closing Connection, ইত্যাদি।
Step 1: State Interface
// State Interface
public interface TCPConnectionState {
void handle(TCPConnection connection);
}
Step 2: ConcreteState Classes
// 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
}
}
Step 3: Context (TCPConnection)
// 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);
}
}
Step 4: Client
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.
}
}
ব্যাখ্যা:
- State Interface:
TCPConnectionStateএকটি ইন্টারফেস যা সব ধরনের স্টেটের জন্য আচরণ সংজ্ঞায়িত করে। - ConcreteState Classes:
EstablishedState,ClosedState, এবংListeningStateহল ConcreteState ক্লাস, যেখানে প্রতিটি স্টেটেhandle()মেথডের মাধ্যমে কার্যক্রম নির্ধারণ করা হয়। - Context (TCPConnection):
TCPConnectionক্লাসটি বর্তমান অবস্থা সংরক্ষণ করে এবংhandleRequest()মেথডের মাধ্যমে সঠিক স্টেটের আচরণ ট্রিগার করে। স্টেট পরিবর্তন করার জন্যsetState()মেথড ব্যবহার করা হয়।
State Pattern এর সুবিধা:
- State Transitions: এই প্যাটার্নটি অবজেক্টের মধ্যে স্টেট পরিবর্তনের ফলে আচরণের পরিবর্তনকে খুবই সহজ করে তোলে।
- Encapsulation: স্টেটের প্রতিটি পরিবর্তন এবং আচরণের বাস্তবায়ন আলাদা ক্লাসে রাখা হয়, যা কোডের পড়া এবং রক্ষণাবেক্ষণ সহজ করে তোলে।
- Extendable: নতুন স্টেট যুক্ত করা সহজ, কারণ শুধুমাত্র নতুন ConcreteState ক্লাস তৈরি করতে হবে এবং Context ক্লাসে কোন পরিবর্তন করতে হবে না।
- Flexibility: স্টেট পরিবর্তনের মাধ্যমে আচরণকে সহজে কাস্টমাইজ করা যায়।
State Pattern এর ব্যবহার:
- State Machine: এটি এমন জায়গায় ব্যবহার করা হয় যেখানে অনেক ধরণের অবস্থা এবং সেগুলোর মধ্যে ট্রানজিশন প্রয়োজন। যেমন TCP Connection স্টেট মেশিন, গেমের অবস্থা, ডিভাইসের বিভিন্ন অপারেশন ইত্যাদি।
- Workflow Management Systems: অনেক ধাপের প্রক্রিয়া যেখানে প্রতিটি ধাপ একটি নির্দিষ্ট অবস্থা নির্ধারণ করে এবং পরবর্তী ধাপে প্রবাহিত হয়।
- UI States: ইউজার ইন্টারফেসে বিভিন্ন অবস্থার মধ্যে অর্ডার পরিবর্তন, যেমন একটি বোতাম ক্লিক করার পরে অ্যাপ্লিকেশন একটি নতুন অবস্থায় প্রবাহিত হবে।
সারাংশ
State Pattern হল একটি Behavioral Design Pattern যা অবজেক্টের অভ্যন্তরীণ অবস্থার পরিবর্তনের সাথে সাথে তার আচরণ পরিবর্তন করতে সাহায্য করে। এটি স্টেট পরিবর্তনের জন্য অবজেক্টের আচরণ পরিবর্তন করে এবং স্টেটের অবস্থা অনুযায়ী সঠিক কর্মপদ্ধতি গ্রহণ করে। এটি কোডের রক্ষণাবেক্ষণ এবং এক্সটেনশন সহজ করে, কারণ নতুন স্টেটগুলি সরাসরি যুক্ত করা যায় এবং পুরনো কোডে কমপ্লেক্সিটি বৃদ্ধি না করে। State Pattern বিশেষভাবে উপযোগী যেখানে অবজেক্টের অনেকগুলি অবস্থার মধ্যে আচরণ পরিবর্তন করতে হয়।
Read more