السلام عليكم
لو فرضنا انه عندي ملف على سيرفري , طيب لو فرضنا انا برمجت كود يفحص متصفح اليوزر اللي رايد يحمل هذا الملف لكي اعلم نظام تشغيله ووفقا لذلك اعطيه لنك التحميل فاذا مثلا احتوى المتغير
$_SERVER["HTTP_USER_AGENT"]
على كلمة WIN
فهذا يعني ان نظام التشغيل هو وندوز فاعطيه رابط الملف بامتداد zip
وخلاف ذلك اعطيه رابط الملف بامتداد .tar.gz
في هذا المثال لدينا ستراجيتان الاولى لملف الوندوز والثانية لملف اللنكس
طيب الان فقط القوا نظرة على الكود التالي لتنفيذ المثال :
abstract class FileNamingStrategy {
abstract function createLinkName($filename);
}
class ZipFileNamingStrategy extends FileNamingStrategy {
function createLinkName($filename)
{
return "http://downloads.foo.bar/$filename.zip";
}
}
class TarGzFileNamingStrategy extends FileNamingStrategy {
function createLinkName($filename)
{
return "http://downloads.foo.bar/$filename.tar.gz";
}
}
if (strstr($_SERVER["HTTP_USER_AGENT"], "Win")) {
$fileNamingObj = new ZipFileNamingStrategy();
} else {
$fileNamingObj = new TarGzFileNamingStrategy();
}
$calc_filename = $fileNamingObj->createLinkName("Calc101");
$stat_filename = $fileNamingObj->createLinkName("Stat2000");
print <<<EOF
<h1>The following is a list of great downloads<</h1>
<br>
<a href="$calc_filename">A great calculator</a><br>
<a href="$stat_filename">The best statistics application</a><br>
<br>
EOF;الكود السابق سوف ينفذ ويحقق ما ارغبه في مثالي السابق ولكن سؤالي هو ما فائدة الفئة FileNamingStrategy
لماذا لا نلغيها فحسب ونستدعي كل فئة بصورة مستقلة
فيصبح الكود كالتالي :
class ZipFileNamingStrategy {
function createLinkName($filename)
{
return "http://downloads.foo.bar/$filename.zip";
}
}
class TarGzFileNamingStrategy {
function createLinkName($filename)
{
return "http://downloads.foo.bar/$filename.tar.gz";
}
}
if (strstr($_SERVER["HTTP_USER_AGENT"], "Win")) {
$fileNamingObj = new ZipFileNamingStrategy();
} else {
$fileNamingObj = new TarGzFileNamingStrategy();
}
$calc_filename = $fileNamingObj->createLinkName("Calc101");
$stat_filename = $fileNamingObj->createLinkName("Stat2000");
print <<<EOF
<h1>The following is a list of great downloads<</h1>
<br>
<a href="$calc_filename">A great calculator</a><br>
<a href="$stat_filename">The best statistics application</a><br>
<br>
EOF;