編程中的那些套路——關於簡單工廠模式

該文章屬於《編程中的那些經典套路——設計模式彙總》系列,而且如下內容基於語言PHPphp

面向對象五大原則中有一點很是重要的原則:單一職責原則編程

簡單工廠模式就是遵循了這一原則,它讓不一樣職責的類各司其職。segmentfault

簡單工廠模式是面向對象多態性的一個應用,它的好處在於:設計模式

  • 代碼具備必定的拓展性函數

  • 遵循了單一職責原則設計

  • 屬於面向接口編程code

  • 簡單工廠模式提供了一個對外的類 Client和實際工做的類,外界只須要傳遞特定的參數就能夠調用不一樣的實際功能類,而不須要直接面對實際類與函數,拓展性大大加強。對象

一言不合上代碼。接口

簡單工廠模式.phpget

<?php


    //設定銀行工做接口
     
    interface Bankwork{
     
        public function work();
           
    }
     
    //存款職員
 
class Depositer implements Bankwork{
 
    public function work(){
 
        return '開始存款';
 
    }
 
}
 
//銷售職員
 
class Marketer implements bankwork{
 
    public function work(){
 
        return '開始銷售';
 
    }
 
}
 
//接待職員
 
class Receiver implements Bankwork{
 
    public function work(){
 
        return '開始接待';
 
    }
 
}
 
//客戶端調用接口類
 
class Client {
 
    public function working($type){
 
        switch ($type) {
 
            case '存款職員':
 
                $man = new Depositer;
 
                break;
 
            case '銷售':
 
                $man = new Marketer;
 
                break;
 
            case '接待':
 
                $man = new Receiver;
 
                break;
 
            default:
 
                echo '傳輸參數有誤,不屬於任何一個職位';
 
                break;
 
        }
 
        return $man->work();
 
    }
 
}
 
$bankstaff = new Client();
 
print_r($bankstaff->working('接待')); // output :開始接待
 
?>

簡單工廠模式能夠經過傳遞對應的參數從而調用指定的類方法,後期須要增長職位的話,能夠直接新增一個類而後寫一個switch ($type) {case’condition’: }便可。

重點來了,簡單工廠模式的不足:

可是簡單工廠模式有一個不足,雖然它遵循了單一職責原則,但它違反了另外一條一樣很重要的原則:開放封閉原則

若是新增一個財務職位,那麼咱們還要修改 Client類,增長一個switch ($type) {case’condition’: }判斷,這無疑是十分災難的,由於寫好的代碼咱們最好不要再去碰它,由於極可能形成未知的緣由,你說是不?

由此衍生出更加規範,拓展性更強,遵循了開放封閉原則的的工廠模式(沒有簡單)

該文章屬於《編程中的那些經典套路——設計模式彙總》系列

相關文章
相關標籤/搜索