1. 程式人生 > >PHP設計模式系列:簡單工廠模式

PHP設計模式系列:簡單工廠模式

簡單工廠模式

簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法(Static Factory Method)模式,但不屬於23種GOF設計模式之一。簡單工廠模式是由一個工廠物件決定創建出哪一種產品類的例項。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的一個特殊實現。
簡單工廠模式(Simple Factory Pattern):定義一個工廠類,它可以根據引數的不同返回不同類的例項,被建立的例項通常都具有共同的父類。因為在簡單工廠模式中用於建立例項的方法是靜態(static)方法,因此簡單工廠模式又被稱為靜態工廠方法(Static Factory Method)模式,它屬於類建立型模式。

基本流程

首先將需要建立的各種不同物件(例如各種不同的 Chart 物件)的相關程式碼封裝到不同的類中,這些類稱為具體產品類,而將它們公共的程式碼進行抽象和提取後封裝在一個抽象產品類中,每一個具體產品類都是抽象產品類的子類;然後提供一個工廠類用於建立各種產品,在工廠類中提供一個建立產品的工廠方法,該方法可以根據所傳入的引數不同建立不同的具體產品物件;客戶端只需呼叫工廠類的工廠方法並傳入相應的引數即可得到一個產品物件。

舉例

以計算器為例實現簡單工廠模式。

結構圖如圖

這裡寫圖片描述

  • OperationFactory(工廠角色):工廠角色即工廠類,它是簡單工廠模式的核心,負責實現建立所有產品例項的內部邏輯;工廠類可以被外界直接呼叫,建立所需的產品物件;在工廠類中提供了靜態的工廠方法 createOperate(),它的返回型別為具體產品角色。

  • Operation(抽象產品角色):它是工廠類所建立的所有物件的父類,封裝了各種產品物件的公有方法,它的引入將提高系統的靈活性,使得在工廠類中只需定義一個通用的工廠方法,因為所有建立的具體產品物件都是其子類物件。

  • OperateAdd、OperateSub、OperateMul、OperateDiv(具體產品角色):它是簡單工廠模式的建立目標,所有被建立的物件都充當這個角色的某個具體類的例項。每一個具體產品角色都繼承了抽象產品角色,需要實現在抽象產品中宣告的抽象方法。

PHP程式碼實現

<?php
//抽象產品角色
abstract class Operation
{
    private
$numA,$numB; public function __set($name,$value){ $this->$name=$value; } public function __get($name){ return $this->$name; } abstract public function getResult(); } //具體產品角色 class OperateAdd extends Operation { public function getResult(){ $result=$this->numA+$this->numB; return $result; } } class OperateSub extends Operation { public function getResult(){ $result=$this->numA-$this->numB; return $result; } } class OperateMul extends Operation { public function getResult(){ $result=$this->numA*$this->numB; return $result; } } class OperateDiv extends Operation { public function getResult(){ if($this->numB==0){ throw new Exception("除數不能為零", 1); } $result=$this->numA/$this->numB; return $result; } } //工廠角色 class OperationFactory { public static function createOperate($operate){ switch ($operate) { case '+': $oper=new OperateAdd(); break; case '-': $oper=new OperateSub(); break; case '*': $oper=new OperateMul(); break; case '/': $oper=new OperateDiv(); break; default: break; } return $oper; } } $oper=OperationFactory::createOperate('+'); $oper->numA=5; $oper->numB=5; $b=$oper->getResult();

相關推薦

PHP設計模式系列簡單工廠模式

簡單工廠模式 簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法(Static Factory Method)模式,但不屬於23種GOF設計模式之一。簡單工廠模式是由一個工廠物件決定創建出哪一種產品類的例項。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解

初識設計模式1簡單工廠模式

簡單工廠 height 判斷 目前 mes strong 產品 return logs 簡單工廠模式 簡單工廠模式是類的創建模式,又叫做靜態工廠方法模式。簡單工廠模式由一個工廠對象決定生產出哪一種產品類的實例。 為什麽要使用簡單工廠模式 原因很簡單:解耦。 LOL場

(原創)我眼中的設計模式系列簡單工廠模式(一)

int 業務 text 們的 acc 現在 rgs sub reat 簡單工廠模式   在日常的軟件開發中,我們一般都是按照模塊來劃分工作的。 場景一:   試想我們現在有這麽一個模塊,為其他的模塊提供服務,比如說我們調用了好幾個外部接口,統一返回XML字符串,每個接口返回

設計模式筆記簡單工廠模式 -- 創建型

-- 一個 筆記 簡單 靜態 com 工廠模式 不同 static 簡單工廠模式 定義一個工廠類,可以根據輸入的不同返回不同類的實例。被創建的類通常有共同的父類。因為通常創建實例的方法都是static,所以又被稱為靜態工廠模式 代碼樣例 設計模式筆記:簡單

設計模式之一簡單工廠模式

package com.xjh.demo.designpattern.pattern1; public abstract class Animal { public abstract void eat(); } package com.xjh.demo.de

設計模式之一簡單工廠模式,用python實現簡易計算器

最近自學Python,想做些小專案練練手,發現程傑寫的大話設計模式這書不錯,適合新手入門。開始這本書第一章學習,這裡實現簡單工廠模式。以實現圖形介面的簡易計算器為例項,能夠計算+-/*% ( )等混合表示式,ps: 沒有實現負數的功能。具體過程大致分為以下幾個步

大話設計模式簡單工廠模式

一.模式定義 簡單工廠模式也稱為靜態工廠模式。屬於類建立型設計模式。實質是一個“”工廠系統“”可以產生出多種不同的”產品物件”,使用者不需要知道“”產品物件“”是怎麼產生的,只需要知道關於該“產品物件”的關鍵引數,將該引數傳給“工廠系統”就可以由工廠系統生產出對應的產品。

Java描述設計模式(02)簡單工廠模式

一、生活場景簡介 1、引入場景 訂餐流程簡單描述 1)、食品抽象類,規定食品的基礎屬性操作 2)、魚類,雞肉類食品類擴充套件 3)

設計模式系列之一簡單工廠模式

前言 設計模式能夠幫助我們設計出健壯,低耦合性的程式碼,從此和高耦合的程式碼say goodbye!在所有的的設計模式中,簡單工廠算是我們平時接觸比較多的吧,多執行緒中的消費者工廠類與生產者工廠類應該算是接觸最早的設計模式,簡單工廠模式要解決的首要問題就是降低

設計模式筆記1簡單工廠模式

1.3 簡單 修改 作用 面向對象 對象 面向 tro 計算   如果想成為一名更優秀的軟件設計師,了解優秀軟件設計的演變過程比學習優秀設計本身更有價值。 1.1 面向對象的好處   通過封裝、繼承多態把程序的耦合度降低,使用設計模式使得程序更加靈活,容易修改,易於復用

C#設計模式之創建類模式簡單工廠模式

div main bst http fin 想要 對象 sqlserver 關鍵字 這是記錄設計模式種的創建型模式的第一篇,所以,在開頭要說一些關於創建型模式的含義和意義。 創建型模式 軟件系統在運行時,類將被實例化成對象,並由這些被創建的對象協作完成系統中要求的各項業務功

設計模式回顧系列簡單工廠模式

operate void emp pub 具體類 有著 ogr etop ima 簡單工廠模式,需要說明的是,它並不屬於GOF 23種設計模式中的一種。但它卻豐富了工廠模式家族,因為其簡單的思想和使用方式,也有很廣泛的使用 簡單工廠模式又稱為靜態工廠模式,它用來確定創建哪一

Java 設計模式(一)簡單工廠模式

參考連結:簡單工廠模式-Simple Factory Pattern 1. 模式概述 定義:定義一個工廠類,它可以根據引數的不同返回不同類的例項,被建立的例項通常都具有共同的父類。因為在簡單工廠模式中用於建立例項的方法是靜態方法,因此簡單工廠模式又被稱為靜態工廠方法模式。 簡

大話設計模式簡單工廠模式

    由於面向過程程式設計造成的程式碼膨脹問題越來越嚴重,使其維護的代價高,靈活性很低。為了使程式碼易維護、易擴充套件、易複用和靈活性好,所以我們在採用面向物件程式設計的時候,防止採用面向物件的語言實際上卻做著面向過程的事兒,更需要採用某種設計模式,核心就是使程式變得高內

c++設計模式簡單工廠模式(Simple Factory Pattern)

 定義: 從設計模式的型別上來說,簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法(StaticFactory Method)模式,但不屬於23種GOF設計模式之一。簡單工廠模式是由一個工廠物件決定創建出哪一種產品類的例項。簡單工廠模式是工廠模式家族中最簡單實用的模式,

設計模式簡單工廠模式

簡單工廠模式又叫做靜態工廠方法模式,不屬於23種設計模式中的一種。 簡單工廠模式是工廠模式家族中最簡單的一種。 簡單工廠模式具有以下優點: 讓外界可以從直接建立具體物件的尷尬局面解脫出來,僅僅負責“消費”物件就可以了 外界不必管這些物件究竟如何建立及組織

設計模式之策略模式&amp;簡單工廠模式

抽象 jsb args watermark amp pri eas 時間 並且 學習設計模式已經有非常長一段時間了。事實上先前已經敲過一遍了,可是老認為沒有學到什麽,認識也不夠深刻,如今趁著重構機房。再又一次來過,也不晚。 事實上在敲了機房之後,看看模式,事實

Note8:C#設計模式工廠方法模式(VS 簡單工廠模式 & 抽象工廠模式

工廠方法模式 blog 抽象工廠 nbsp strong str cnblogs note 設計 一、資源說明 (1)本文有參考:http://www.cnblogs.com/zhili/p/FactoryMethod.html 待更!Note8:C#設計模式—工廠方法

簡單工廠模式

returns 原則 分離 問題 簡單的 編號 tor 在一起 分享 設計模式分類:  創建型模式。  結構型模式。  行為模式。   23種設計模式,如何記。面向對象的系統中有很多對象,創建型模式解決的問題就是如何創建對象,何時創建對象,它努力的讓代碼不要太多的關註對象的

【JS設計模式】溫習簡單工廠模式工廠方法模式、抽象工廠模式概念

his mac script 開頭 str new 每一個 簡單工廠 pattern 註:空心箭頭表示的是種繼承關系,工廠類和產品類之間是一種依賴關系。是用箭頭加虛線表示的,以下的模型圖是用的實線是不正確(時間不夠用,在這裏我偷懶了。這個習慣不好,呵呵)簡單工廠模式(S