最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析php工廠模式

 更新時(shí)間:2014年11月25日 11:55:59   投稿:hebedich  
本文通過實(shí)例向大家展示了php設(shè)計(jì)模式中的工廠模式,工廠模式分為三種:簡(jiǎn)單工廠、工廠方法、抽象工廠。想學(xué)習(xí)的小伙伴們千萬不要錯(cuò)過。

本系列文章來總結(jié)一下設(shè)計(jì)模式在PHP中的應(yīng)用,這是第二篇?jiǎng)?chuàng)建型模式之工廠模式。

設(shè)計(jì)模式的一般介紹在第一篇文章講了,這里就不重復(fù)。

工廠模式

實(shí)現(xiàn):定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪一個(gè)類。
應(yīng)用場(chǎng)景:眾多子類并且會(huì)擴(kuò)充、創(chuàng)建方法比較復(fù)雜。

工廠模式分為三種:簡(jiǎn)單工廠、工廠方法、抽象工廠 ,

三種工廠的區(qū)別是,抽象工廠由多條產(chǎn)品線,而工廠方法只有一條產(chǎn)品線,是抽象工廠的簡(jiǎn)化。而工廠方法和簡(jiǎn)單工廠相對(duì),大家初看起來好像工廠方法增加了許多代碼但是實(shí)現(xiàn)的功能和簡(jiǎn)單工廠一樣。但本質(zhì)是,簡(jiǎn)單工廠并未嚴(yán)格遵循設(shè)計(jì)模式的開閉原則,當(dāng)需要增加新產(chǎn)品時(shí)也需要修改工廠代碼。但是工廠方法則嚴(yán)格遵守開閉原則,模式只負(fù)責(zé)抽象工廠接口,具體工廠交給客戶去擴(kuò)展。在分工時(shí),核心工程師負(fù)責(zé)抽象工廠和抽象產(chǎn)品的定義,業(yè)務(wù)工程師負(fù)責(zé)具體工廠和具體產(chǎn)品的實(shí)現(xiàn)。只要抽象層設(shè)計(jì)的好,框架就是非常穩(wěn)定的。

復(fù)制代碼 代碼如下:

/**
 * 工廠模式
 */
//抽象產(chǎn)品
interface Person {
    public function getName();
}
//具體產(chǎn)品實(shí)現(xiàn)
class Teacher implements Person {
    function getName() {
        return "老師n";
    }
}
class Student implements Person {
    function getName() {
        return "學(xué)生n";
    }
}
//簡(jiǎn)單工廠
class SimpleFactory {
       public static function getPerson($type) {
              $person = null;
              if ($type == 'teacher') {
                     $person = new Teacher();
              } elseif ($type == 'student') {
                     $person = new Student();
              }
              return $person;
       }
}
//簡(jiǎn)單工廠調(diào)用
class SimpleClient {
       function main() {
              // 如果不用工廠模式,則需要提前指定具體類
              // $person = new Teacher();
              // echo $person->getName();
              // $person = new Student();
              // echo $person->getName();
              // 用工廠模式,則不需要知道對(duì)象由什么類產(chǎn)生,交給工廠去決定
              $person = SimpleFactory::getPerson('teacher');
              echo $person->getName();
              $person = SimpleFactory::getPerson('student');
              echo $person->getName();
       }
}
//工廠方法
interface CommFactory {
    public function getPerson();
}
//具體工廠實(shí)現(xiàn)
class StudentFactory implements CommFactory {
    function getPerson(){
        return new Student();
    }
}
class TeacherFactory implements CommFactory {
    function getPerson() {
        return new Teacher();
    }
}
//工廠方法調(diào)用
class CommClient {
    static function main() {
           $factory = new TeacherFactory();
           echo $factory->getPerson()->getName();
           $factory = new StudentFactory();
           echo $factory->getPerson()->getName();
    }
}
//抽象工廠模式另一條產(chǎn)品線
interface Grade {
       function getYear();
}
//另一條產(chǎn)品線的具體產(chǎn)品
class Grade1 implements Grade {
       public function getYear() {
              return '2003級(jí)';
       }
}
class Grade2 implements Grade {
       public function getYear() {
              return '2004級(jí)';
       }
}
//抽象工廠
interface AbstractFactory {
       function getPerson();
       function getGrade();
}
//具體工廠可以產(chǎn)生每個(gè)產(chǎn)品線的產(chǎn)品
class Grade1TeacherFactory implements AbstractFactory {
       public function getPerson() {
              return new Teacher();
       }
       public function getGrade() {
              return new Grade1();
       }
}
class Grade1StudentFactory implements AbstractFactory {
       public function getPerson() {
              return new Student();
       }
       public function getGrade() {
              return new Grade1();
       }
}
class Grade2TeacherFactory implements AbstractFactory {
       public function getPerson() {
              return new Teacher();
       }
       public function getGrade() {
              return new Grade2();
       }
}
//抽象工廠調(diào)用
class FactoryClient {
       function printInfo($factory) {
              echo $factory->getGrade()->getYear().$factory->getPerson()->getName();
       }
       function main() {
              $client = new FactoryClient();
              $factory = new Grade1TeacherFactory();
              $client->printInfo($factory);
              $factory = new Grade1StudentFactory();
              $client->printInfo($factory);
              $factory = new Grade2TeacherFactory();
              $client->printInfo($factory);
       }
}
//簡(jiǎn)單工廠
//SimpleClient::main();
//工廠方法
//CommClient::main();
//抽象工廠
FactoryClient::main();

小伙伴們了解了php設(shè)計(jì)模式中的工廠模式了吧,是不是挺簡(jiǎn)單呢,接下來的文章我們將介紹下創(chuàng)建者模式

相關(guān)文章

最新評(píng)論

新余市| 达孜县| 漳浦县| 茶陵县| 紫阳县| 桑日县| 随州市| 内黄县| 洛宁县| 平舆县| 淮北市| 会泽县| 芮城县| 新晃| 大英县| 芜湖市| 浮山县| 陕西省| 荥经县| 常州市| 哈巴河县| 墨竹工卡县| 阳信县| 佳木斯市| 涞水县| 龙川县| 三河市| 英超| 泾川县| 襄城县| 宜川县| 桐乡市| 乌苏市| 南安市| 图木舒克市| 青海省| 武清区| 崇义县| 镇江市| 左云县| 卓资县|