設(shè)計(jì)模式--工廠模式

工廠模式的最大優(yōu)點(diǎn)在于創(chuàng)建對(duì)象上面,就是把創(chuàng)建對(duì)象的過程封裝起來,這樣隨時(shí)可以產(chǎn)生一個(gè)新的對(duì)象。減少代碼進(jìn)行復(fù)制粘帖,耦合關(guān)系重,牽一發(fā)動(dòng)其他部分代碼。
工廠模式的三種形式:
1、簡(jiǎn)單工廠模式

interface person{
    function eat();
    function drink();
}

class Woman implements person{

    function eat(){
        echo "woman 吃飯";
    }

    function drink(){
        echo "woman 喝水";
    }

}


class Man implements person{
    function eat(){
        echo "man 吃飯";
    }

    function drink(){
        echo "man 喝水";
    }
}

class Factory{
    function createObj($type){
        return new $type;
    }
}

$obj = new Factory();
$man = $obj->createObj('Man');
$man->eat();

$woman = $obj->createObj('Woman');
$woman->eat();

2、工廠模式

interface person{
    function eat();
    function drink();
}

class Woman implements person{

    function eat(){
        echo "woman 吃飯";
    }

    function drink(){
        echo "woman 喝水";
    }

}


class Man implements person{
    function eat(){
        echo "man 吃飯";
    }

    function drink(){
        echo "man 喝水";
    }
}

interface obj{
    function create();
}

class WomanObj implements obj{
    function create(){
        return new Woman();
    }
}

class ManObj implements obj{
    function create(){
        return new Man();
    }
}

class Factory{

    function getObj(){
        $woman = new WomanObj();
        $wobj = $woman->create();
        $wobj->eat();

        $Man = new ManObj();
        $Mobj = $Man->create();
        $Mobj->eat();
    } 
}

$obj = new Factory();
$obj->getObj();

3、抽象工廠

interface person{
    function eat();
    function drink();
}

class Woman implements person{

    function eat(){
        echo "woman  吃飯";
    }

    function drink(){
        echo "woman 喝水";
    }

}

class Iwoman implements person{
    function eat(){
        echo "內(nèi)向 woman 吃飯 放不開";
    }

    function drink(){
        echo "內(nèi)向 woman 喝水 放不開";
    }
}




class Man implements person{
    function eat(){
        echo "man 吃飯";
    }

    function drink(){
        echo "man 喝水";
    }
}

abstract class create{
    abstract public  function createObj();
    abstract public  function createIobj();
}

class Wobj extends create{
    public function createObj(){
        return new Woman();
    }

    public function createIobj(){
        return new Iwoman();
    }
}

$obj = new Wobj();
$woman = $obj->createObj();
$woman->eat();
echo "<br/>";
$woman = $obj->createIobj();
$woman->eat();

區(qū)別:
簡(jiǎn)單工廠模式:用來生產(chǎn)同一等級(jí)結(jié)構(gòu)中的任意產(chǎn)品。對(duì)與增加新的產(chǎn)品,無能為力
工廠模式 :用來生產(chǎn)同一等級(jí)結(jié)構(gòu)中的固定產(chǎn)品。(支持增加任意產(chǎn)品)
抽象工廠 :用來生產(chǎn)不同產(chǎn)品族的全部產(chǎn)品。(對(duì)于增加新的產(chǎn)品,無能為力;支持增加產(chǎn)品族)

簡(jiǎn)單工廠模式:工廠類負(fù)責(zé)創(chuàng)建的對(duì)象較少,客戶只知道傳入工廠類的參數(shù),對(duì)于如何創(chuàng)建對(duì)象不關(guān)心。

工廠方法模式:當(dāng)一個(gè)類不知道它所必須創(chuàng)建對(duì)象的類或一個(gè)類希望由子類來指定它所創(chuàng)建的對(duì)象時(shí),當(dāng)類將創(chuàng)建對(duì)象的職責(zé)委托給多個(gè)幫助子類中得某一個(gè),并且你希望將哪一個(gè)幫助子類是代理者這一信息局部化的時(shí)候,可以使用工廠方法模式。

抽象工廠模式:一個(gè)系統(tǒng)不應(yīng)當(dāng)依賴于產(chǎn)品類實(shí)例何如被創(chuàng)建,組合和表達(dá)的細(xì)節(jié),這對(duì)于所有形態(tài)的工廠模式都是重要的。這個(gè)系統(tǒng)有多于一個(gè)的產(chǎn)品族,而系統(tǒng)只消費(fèi)其 中某一產(chǎn)品族。同屬于同一個(gè)產(chǎn)品族的產(chǎn)品是在一起使用的,這一約束必須在系統(tǒng)的設(shè)計(jì)中體現(xiàn)出來。系統(tǒng)提供一個(gè)產(chǎn)品類的庫,所有的產(chǎn)品以同樣的接口出現(xiàn),從 而使客戶端不依賴于實(shí)現(xiàn)。

不管何種方式,根據(jù)具體的業(yè)務(wù)來定,達(dá)到最大程度的代碼復(fù)用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 設(shè)計(jì)模式——工廠模式 工廠模式核心是封裝對(duì)象的創(chuàng)建接口,將new對(duì)象的操作封裝起來,方便創(chuàng)建使用、管理對(duì)象。 工廠...
    Ant_way閱讀 757評(píng)論 0 0
  • 設(shè)計(jì)模式匯總 一、基礎(chǔ)知識(shí) 1. 設(shè)計(jì)模式概述 定義:設(shè)計(jì)模式(Design Pattern)是一套被反復(fù)使用、多...
    MinoyJet閱讀 4,095評(píng)論 1 15
  • 前言 最近在復(fù)習(xí)java設(shè)計(jì)模式中的工廠模式。本來有一點(diǎn)小小的理解。感覺都寫的不錯(cuò),就是有點(diǎn)太零散了,最后還是決定...
    斌林誠(chéng)上閱讀 19,341評(píng)論 3 25
  • 原文地址:LoveDev 工廠模式是最常用的設(shè)計(jì)模式之一,該模式定義一個(gè)用于創(chuàng)建對(duì)象的工廠類,調(diào)用者不用關(guān)心創(chuàng)建的...
    KevinLive閱讀 395評(píng)論 0 0
  • 許多年前,我也是個(gè)樸素的少年,偷偷的在高中暗戀班長(zhǎng),在大學(xué)錯(cuò)過了人生中最重要的機(jī)會(huì)。轉(zhuǎn)眼畢業(yè)數(shù)年,在一個(gè)連公園環(huán)形...
    獨(dú)行俠丁一貓閱讀 435評(píng)論 1 0

友情鏈接更多精彩內(nèi)容