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

資訊專欄INFORMATION COLUMN

PHP設(shè)計模式(八):工廠模式

sorra / 1823人閱讀

摘要:原文地址設(shè)計模式八工廠模式在設(shè)計模式七設(shè)計模式分類中我們提到過創(chuàng)建設(shè)計模式,創(chuàng)建設(shè)計模式專注于設(shè)計對象和實例的創(chuàng)建過程。工廠模式工廠模式,也是五種設(shè)計模式中唯一的類的設(shè)計模式,即在類中就能實現(xiàn)的設(shè)計模式。

原文地址:PHP設(shè)計模式(八):工廠模式

Introduction

在PHP設(shè)計模式(七):設(shè)計模式分類中我們提到過創(chuàng)建設(shè)計模式(Creation patterns),創(chuàng)建設(shè)計模式專注于設(shè)計對象(Object)和實例(Instance)的創(chuàng)建過程。
創(chuàng)建設(shè)計模式包括下面五種設(shè)計模式:

抽象工廠設(shè)計模式(Abstract Factory)

生成器模式(Builder)

工廠設(shè)計模式(Factory Method)

原型設(shè)計模式(Prototype Method)

單例設(shè)計模式(Singleton)

當程序逐漸擴展的時候,需要更多的新對象,新對象的創(chuàng)建不應(yīng)該依賴于創(chuàng)建者,換句話說,新對象的創(chuàng)建過程,不應(yīng)該依賴調(diào)用創(chuàng)建函數(shù)的對象。為了減少冗余,增加拓展性,工廠模式就是一種創(chuàng)建新對象時使用的設(shè)計模式。

工廠模式

工廠模式,也是五種設(shè)計模式中唯一的類的設(shè)計模式(Class patterns),即在類中就能實現(xiàn)的設(shè)計模式。
聽起來挺抽象?對比原型設(shè)計模式,這是一種對象設(shè)計模式(Object patterns),通過對象的__clone()方法來實現(xiàn)的設(shè)計模式。
在工廠模式中,新創(chuàng)建的對象/產(chǎn)品并不依賴于生產(chǎn)它的對象/工廠,新對象和調(diào)用者之間是低耦合狀態(tài)。通常調(diào)用者和工廠交互,由工廠來生成新對象,新對象只和工廠有關(guān)。

何時使用工廠模式?

簡單來說,當需求對類的個數(shù)不明確的時候,可以使用工廠模式,如:
你需要創(chuàng)建一個在線博物館,但你并不確切的知道究竟有多少文物,你不可能無限的增加新的文物類,同時對于損毀的文物,你不可能無限的去清理這些類。
反過來說,如果你確切的知道類的總量,那么你就沒有必要使用工程模式,直接通過繼承的方式就能實現(xiàn)好的設(shè)計。

Example

還是使用我們慣用的鯨魚和鯉魚的例子,現(xiàn)在我們想實現(xiàn)一個海洋館,目前我們并不確定究竟有多少海洋生物。
先是一個抽象的工廠類:

create();
  }
}
?>

然后是兩個工廠:鯨魚工廠和鯉魚工廠

create();
  }
}
class CarpFactory extends Factory {
  protected function create() {
    $carp = new Carp();
    return $carp->create();
  }
}
?>

然后是抽象的動物接口:

然后是具體的動物類:鯨魚類和鯉魚類

name = "Whale";
    return $this->name . " is created.
";
  }
}
class Carp implements Animal {
  private $name;
  public function create() {
    $this->name = "Carp";
    return $this->name . " is created.
";
  }
}
?>

下面給出使用工廠創(chuàng)建鯨魚和鯉魚的代碼:

factoryStart();
$carpFactory = new CarpFactory();
echo $carpFactory->factoryStart();
?>

運行一下:

Whale is created.
Carp is created.

到這里你是不是覺得,其實直接生成兩個類就行了,何必搞這么復(fù)雜?別著急,好戲在后面。

修改類的方法

由于Interface的限制,修改類的方法被限定在了create()方法中,因此可以避免偷懶的程序員新增加的不合理函數(shù)。
簡單修改一下:

name = "Whale";
    return $this->name . " is created. Whale eats fish.
";
  }
}
class Carp implements Animal {
  private $name;
  public function create() {
    $this->name = "Carp";
    return $this->name . " is created. Carp eats moss.
";
  }
}
?>

由于對象是由工廠造出來的,外部不可能直接調(diào)用或者修改類的實現(xiàn),類的修改被限定在了類的對外接口上。這樣的架構(gòu)易于擴展。

一個工廠

工廠模式的靈活,在于可以只擁有一個工廠,卻能生產(chǎn)多個類/產(chǎn)品。
修改我們的抽象工廠,給create()方法增加animal接口:

create($animal);
  }
}
?>

然后合并之前的鯨魚工廠和鯉魚工廠:

create();
  }
}
?>

修改使用工廠創(chuàng)建鯨魚和鯉魚的代碼:

factoryStart(new Whale());
echo $animalFactory->factoryStart(new Carp());
?>

運行一下:

Whale is created. Whale eats fish.
Carp is created. Carp eats moss.

鯨魚類和鯉魚類源源不斷的從一個工廠中被創(chuàng)建出來了。通過這種設(shè)計模式,類的創(chuàng)建過程統(tǒng)一通過一個接口來實現(xiàn),接口外部并不需要關(guān)心類是如何被創(chuàng)建出來的,而接口內(nèi)部實現(xiàn)也得到了很好的拓展性。

Summary

本文介紹了工廠設(shè)計模式,使用這種設(shè)計模式,可以讓你通過一個或多個工廠的接口,創(chuàng)建無數(shù)新類,調(diào)用任意類的方法。由于接口嚴格定義了新類/產(chǎn)品的形態(tài),因此在維護和拓展的時候,可以省去不少力氣。

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

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/21678.html

相關(guān)文章

  • PHP設(shè)計模式(九):原型設(shè)計模式

    摘要:原型設(shè)計模式中的構(gòu)造函數(shù)使用創(chuàng)建新對象時,并不會觸發(fā)類的構(gòu)造函數(shù)。事實上,使用構(gòu)造函數(shù)并不一定是一個好的設(shè)計,由于構(gòu)造函數(shù)內(nèi)的邏輯無法被外部控制,當需要修改一個類構(gòu)造時的邏輯時,除了修改類的構(gòu)造函數(shù)實現(xiàn)以外,別無他法,這破壞了類的封裝。 原文地址:PHP設(shè)計模式(九):原型設(shè)計模式 Introduction 在PHP設(shè)計模式(八):工廠模式中我們介紹了創(chuàng)建設(shè)計模式(Creation p...

    warnerwu 評論0 收藏0
  • JS 設(shè)計模式 (建造者模式

    摘要:即建造者模式可以強制實行一種分步驟進行的建造過程。指導(dǎo)類負責調(diào)用適當?shù)慕ㄔ煺邅斫M建產(chǎn)品,指導(dǎo)類一般不與產(chǎn)品類發(fā)生依賴關(guān)系,與指導(dǎo)類直接交互的是建造者類建造者模式優(yōu)點建造者模式的封裝性很好。 建造者模式 將一個復(fù)雜的構(gòu)建與其表示相分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。主要解決在軟件系統(tǒng)中,有時候面臨著一個復(fù)雜對象的創(chuàng)建工作,由于需求的變化,這個復(fù)雜對象的某些部分經(jīng)常面臨著劇烈的變化...

    tanglijun 評論0 收藏0
  • PHP設(shè)計模式(一)簡單工廠模式 (Simple Factory For PHP

    摘要:工廠模式使一個類的實例化延遲到其子類。參考系列源地址系列目錄設(shè)計模式概述設(shè)計模式一簡單工廠模式設(shè)計模式二工廠方法模式設(shè)計模式三抽象工廠模式設(shè)計模式四單例模式 一、什么是簡單工廠模式 簡單工廠 (Simple Factory)又稱靜態(tài)工廠方法模式(Static Factory Method Pattern)   使用的頻率可以說是非常之高,它的官方解釋為:定義一個用于創(chuàng)建對象的接口,讓子...

    Hancock_Xu 評論0 收藏0
  • PHP設(shè)計模式(二)工廠方法模式(Factory Method)

    摘要:對于這個問題,接下來的工廠方法模式可以解決這個問題。二工廠方法模式的優(yōu)點擁有良好的封裝性,代碼結(jié)構(gòu)清晰。參考系列源地址系列目錄設(shè)計模式概述設(shè)計模式一簡單工廠模式設(shè)計模式二工廠方法模式設(shè)計模式三抽象工廠模式設(shè)計模式四單例模式 簡單工廠簡述: 簡單工廠模式實現(xiàn)了產(chǎn)品類的代碼跟客戶端代碼分離,但會有一個問題,優(yōu)秀的代碼是符合開閉原則如果你要加一個C類產(chǎn)品,你就要修改工廠類里面的代碼,也就是說...

    zhjx922 評論0 收藏0
  • PHP設(shè)計模式(三)抽象工廠模式(Abstract Factory)

    摘要:支持增加任意產(chǎn)品抽象工廠用來生產(chǎn)不同產(chǎn)品族的全部產(chǎn)品。對于增加新的產(chǎn)品,無能為力支持增加產(chǎn)品族參考系列源地址系列目錄設(shè)計模式概述設(shè)計模式一簡單工廠模式設(shè)計模式二工廠方法模式設(shè)計模式三抽象工廠模式設(shè)計模式四單例模式 一、什么是抽象工廠模式 抽象工廠模式的用意為:給客戶端提供一個接口,可以創(chuàng)建多個產(chǎn)品族中的產(chǎn)品對象 ,而且使用抽象工廠模式還要滿足以下條件: 系統(tǒng)中有多個產(chǎn)品族,而系統(tǒng)一次...

    W_BinaryTree 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<