मैं PHP ऑब्जेक्ट्स, पैटर्न और अभ्यास पढ़ रहा हूं । लेखक एक कॉलेज में एक पाठ को मॉडल करने की कोशिश कर रहा है। लक्ष्य पाठ प्रकार (व्याख्यान या संगोष्ठी) का उत्पादन करना है, और सबक के लिए शुल्क इस पर निर्भर करता है कि यह एक प्रति घंटा या निश्चित मूल्य पाठ है। तो आउटपुट होना चाहिए
Lesson charge 20. Charge type: hourly rate. Lesson type: seminar.
Lesson charge 30. Charge type: fixed rate. Lesson type: lecture.
जब इनपुट इस प्रकार है:
$lessons[] = new Lesson('hourly rate', 4, 'seminar');
$lessons[] = new Lesson('fixed rate', null, 'lecture');
मैंने यह लिखा:
class Lesson {
private $chargeType;
private $duration;
private $lessonType;
public function __construct($chargeType, $duration, $lessonType) {
$this->chargeType = $chargeType;
$this->duration = $duration;
$this->lessonType = $lessonType;
}
public function getChargeType() {
return $this->getChargeType;
}
public function getLessonType() {
return $this->getLessonType;
}
public function cost() {
if($this->chargeType == 'fixed rate') {
return "30";
} else {
return $this->duration * 5;
}
}
}
$lessons[] = new Lesson('hourly rate', 4, 'seminar');
$lessons[] = new Lesson('fixed rate', null, 'lecture');
foreach($lessons as $lesson) {
print "Lesson charge {$lesson->cost()}.";
print " Charge type: {$lesson->getChargeType()}.";
print " Lesson type: {$lesson->getLessonType()}.";
print "<br />";
}
लेकिन किताब के मुताबिक, मैं गलत हूं (मुझे पूरा यकीन है कि मैं भी हूं)। इसके बजाय, लेखक ने समाधान के रूप में कक्षाओं की एक बड़ी पदानुक्रम दी। पिछले अध्याय में, लेखक ने निम्नलिखित 'चार साइनपोस्ट' को उस समय के रूप में कहा था जब मुझे अपनी कक्षा संरचना को बदलने पर विचार करना चाहिए:
- कोड दोहराव
- जो वर्ग इसके संदर्भ में बहुत अधिक जानता था
- सभी ट्रेडों का जैक - कक्षाएं जो कई चीजें करने की कोशिश करती हैं
- सशर्त बयान
एकमात्र समस्या जो मैं देख सकता हूं, वह है सशर्त बयान, और वह भी अस्पष्ट तरीके से - तो क्यों यह रिफ्लेक्टर? आपको क्या लगता है कि भविष्य में क्या समस्याएँ पैदा हो सकती हैं, जिन्हें मैंने दूर नहीं किया है?
अद्यतन : मैं उल्लेख करना भूल गया - यह वर्ग संरचना है जिसे लेखक ने समाधान के रूप में प्रदान किया है - रणनीति पैटर्न :