国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

優(yōu)才公開課筆記:php設(shè)計(jì)模式 (二)之工廠模式

aisuhua / 2429人閱讀

摘要:但本質(zhì)是,簡(jiǎn)單工廠并未嚴(yán)格遵循設(shè)計(jì)模式的開閉原則,當(dāng)需要增加新產(chǎn)品時(shí)也需要修改工廠代碼。但是工廠方法則嚴(yán)格遵守開閉原則,模式只負(fù)責(zé)抽象工廠接口,具體工廠交給客戶去擴(kuò)展。

最近開展了三次設(shè)計(jì)模式的公開課,現(xiàn)在來總結(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)定的。

/**
 * 優(yōu)才網(wǎng)公開課示例代碼
 *
 * 工廠模式
 *
 * @author 優(yōu)才網(wǎng)全棧工程師教研組
 * @see http://www.ucai.cn
 */

//抽象產(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();

想了解更多,來聽公開課吧:http://www.ucai.cn/train?f=17

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/20771.html

相關(guān)文章

  • 優(yōu)才公開筆記php設(shè)計(jì)模式(一) 單例模式

    摘要:最近開展了三次設(shè)計(jì)模式的公開課,現(xiàn)在來總結(jié)一下設(shè)計(jì)模式在中的應(yīng)用,這是第一篇?jiǎng)?chuàng)建型模式之單例模式。不過因?yàn)椴恢С侄嗑€程所以不需要考慮這個(gè)問題了。 最近開展了三次設(shè)計(jì)模式的公開課,現(xiàn)在來總結(jié)一下設(shè)計(jì)模式在PHP中的應(yīng)用,這是第一篇?jiǎng)?chuàng)建型模式之單例模式。 一、設(shè)計(jì)模式簡(jiǎn)介 首先我們來認(rèn)識(shí)一下什么是設(shè)計(jì)模式: 設(shè)計(jì)模式是一套被反復(fù)使用、容易被他人理解的、可靠的代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。 設(shè)計(jì)模式不...

    guyan0319 評(píng)論0 收藏0
  • 優(yōu)才公開筆記php設(shè)計(jì)模式 (四)原型模式

    摘要:繼續(xù)分享設(shè)計(jì)模式的公開課,這是第四篇?jiǎng)?chuàng)建型模式之原型模式設(shè)計(jì)模式的一般介紹在第一篇文章講了,不了解的可以先看看。設(shè)計(jì)模式的第一部分,創(chuàng)建型模式就總結(jié)完了。下面還有兩部分結(jié)構(gòu)型設(shè)計(jì)模式和行為型設(shè)計(jì)模式稍后繼續(xù)。 繼續(xù)分享設(shè)計(jì)模式的公開課,這是第四篇?jiǎng)?chuàng)建型模式之原型模式 設(shè)計(jì)模式的一般介紹在第一篇文章講了,不了解的可以先看看。 原型模式: 用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過拷貝這個(gè)...

    Maxiye 評(píng)論0 收藏0
  • 優(yōu)才公開筆記php設(shè)計(jì)模式 (三)創(chuàng)建者模式

    摘要:繼續(xù)分享設(shè)計(jì)模式的公開課,這是第三篇?jiǎng)?chuàng)建型模式之創(chuàng)建者模式設(shè)計(jì)模式的一般介紹在第一篇文章講了,不了解的可以先看看。 繼續(xù)分享設(shè)計(jì)模式的公開課,這是第三篇?jiǎng)?chuàng)建型模式之創(chuàng)建者模式 設(shè)計(jì)模式的一般介紹在第一篇文章講了,不了解的可以先看看。 創(chuàng)建者模式: 在創(chuàng)建者模式中,客戶端不再負(fù)責(zé)對(duì)象的創(chuàng)建與組裝,而是把這個(gè)對(duì)象創(chuàng)建的責(zé)任交給其具體的創(chuàng)建者類,把組裝的責(zé)任交給組裝類,客戶端支付對(duì)對(duì)象的...

    bladefury 評(píng)論0 收藏0
  • 技術(shù)攻略】php設(shè)計(jì)模式(一):簡(jiǎn)介及創(chuàng)建型模式

    摘要:我們分三篇文章來總結(jié)一下設(shè)計(jì)模式在中的應(yīng)用,這是第一篇?jiǎng)?chuàng)建型模式。二提煉設(shè)計(jì)模式的幾個(gè)原則開閉原則模塊應(yīng)對(duì)擴(kuò)展開放,而對(duì)修改關(guān)閉。工廠模式實(shí)現(xiàn)定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪一個(gè)類。設(shè)計(jì)模式的第一部分,創(chuàng)建型模式就總結(jié)完了。 我們分三篇文章來總結(jié)一下設(shè)計(jì)模式在PHP中的應(yīng)用,這是第一篇?jiǎng)?chuàng)建型模式。一、設(shè)計(jì)模式簡(jiǎn)介 首先我們來認(rèn)識(shí)一下什么是設(shè)計(jì)模式: 設(shè)計(jì)模式是一套被反復(fù)使...

    dongxiawu 評(píng)論0 收藏0
  • 【編程堂】php設(shè)計(jì)模式():結(jié)構(gòu)型模式(續(xù))

    摘要:能夠協(xié)調(diào)調(diào)用者和被調(diào)用者,能夠在一定程度上降低系統(tǒng)的耦合性。特點(diǎn)低耦合性,獨(dú)立性好,安全性應(yīng)用客戶訪問不到或者被訪問者希望隱藏自己,所以通過代理來訪問自己。 我們接著上面的幾種模式繼續(xù)講: 4、組合模式 將對(duì)象組合成樹形結(jié)構(gòu)表示部分-整體的層次結(jié)構(gòu)。 特點(diǎn):靈活性強(qiáng) 應(yīng)用:對(duì)象的部分-整體的層次結(jié)構(gòu),模糊組合對(duì)象和簡(jiǎn)單對(duì)象處理問題 代碼實(shí)現(xiàn) /** 組合模式* *///繼承模式clas...

    Nekron 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<